diff --git a/Tests/Unit/Translator/EditInPlaceTranslatorTest.php b/Tests/Unit/Translator/EditInPlaceTranslatorTest.php new file mode 100644 index 00000000..00b9b45d --- /dev/null +++ b/Tests/Unit/Translator/EditInPlaceTranslatorTest.php @@ -0,0 +1,106 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Translation\Bundle\Tests\Unit\Translator; + +use PHPUnit\Framework\TestCase; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; +use Symfony\Component\Translation\Loader\ArrayLoader; +use Symfony\Component\Translation\TranslatorInterface; +use Translation\Bundle\EditInPlace\ActivatorInterface; +use Translation\Bundle\Translator\EditInPlaceTranslator; + +/** + * @author Damien Alexandre + */ +final class EditInPlaceTranslatorTest extends TestCase +{ + public function testEnabled() + { + $symfonyTranslator = $this->getMockBuilder(TranslatorInterface::class)->getMock(); + + $request = new Request(); + $requestStack = new RequestStack(); + $requestStack->push($request); + + $activator = new FakeActivator(true); + $service = new EditInPlaceTranslator($symfonyTranslator, $activator, $requestStack); + + $this->assertSame( + '', + $service->trans('key', []) + ); + } + + public function testDisabled() + { + $symfonyTranslator = $this->getMockBuilder(TranslatorInterface::class)->getMock(); + + $request = new Request(); + $requestStack = new RequestStack(); + $requestStack->push($request); + + $activator = new FakeActivator(false); + $service = new EditInPlaceTranslator($symfonyTranslator, $activator, $requestStack); + + $this->assertSame( + null, + $service->trans('key', []) + ); + } + + public function testHtmlTranslation() + { + $symfonyTranslator = new \Symfony\Component\Translation\Translator('en', null, null, true); + $symfonyTranslator->addLoader('array', new ArrayLoader()); + $symfonyTranslator->addResource('array', ['foo' => 'Normal content.'], 'en'); + $symfonyTranslator->addResource('array', ['bar' => 'Content with HTML in it.'], 'en'); + $symfonyTranslator->addResource('array', ['bar.attr' => 'Content with HTML in it.'], 'en'); + + $request = new Request(); + $requestStack = new RequestStack(); + $requestStack->push($request); + + $activator = new FakeActivator(true); + $service = new EditInPlaceTranslator($symfonyTranslator, $activator, $requestStack); + + $this->assertSame( + 'Normal content.', + $service->trans('foo', []) + ); + + $this->assertSame( + 'Content with HTML in it.', + $service->trans('bar', []) + ); + + $this->assertSame( + 'Content with HTML in it.', + $service->trans('bar.attr', []) + ); + } +} + +class FakeActivator implements ActivatorInterface +{ + private $enabled; + + public function __construct($enabled = true) + { + $this->enabled = $enabled; + } + + public function checkRequest(Request $request = null) + { + return $this->enabled; + } +} diff --git a/Translator/EditInPlaceTranslator.php b/Translator/EditInPlaceTranslator.php index 0547d77e..35f35b4c 100644 --- a/Translator/EditInPlaceTranslator.php +++ b/Translator/EditInPlaceTranslator.php @@ -76,8 +76,8 @@ public function trans($id, array $parameters = [], $domain = null, $locale = nul return sprintf('%s', $domain, $id, - $original, - $plain, + htmlspecialchars($original), + htmlspecialchars($plain), $domain, $locale, $original