diff --git a/DependencyInjection/Compiler/AssetsHelperCompilerPass.php b/DependencyInjection/Compiler/AssetsHelperCompilerPass.php index 638c4c5f..de74561a 100644 --- a/DependencyInjection/Compiler/AssetsHelperCompilerPass.php +++ b/DependencyInjection/Compiler/AssetsHelperCompilerPass.php @@ -13,10 +13,10 @@ use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; -use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; +use Symfony\Component\HttpKernel\Kernel; /** - * Create assets.packages fallback alias for symfony < 2.7 + * Create assets.packages fallback alias for Symfony < 2.7 * * @author Adam Misiorny */ @@ -27,15 +27,8 @@ class AssetsHelperCompilerPass implements CompilerPassInterface */ public function process(ContainerBuilder $container) { - if ($container->hasDefinition('assets.packages')) { - return; + if (Kernel::VERSION_ID < 27000 && $container->has('templating.helper.assets')) { + $container->setAlias('assets.packages', 'templating.helper.assets'); } - - if (!$container->hasDefinition('templating.helper.assets')) { - throw new ServiceNotFoundException('templating.helper.assets'); - } - - // create fallback alias for symfony < 2.7 - $container->setAlias('assets.packages', 'templating.helper.assets'); } } diff --git a/Templating/CKEditorHelper.php b/Templating/CKEditorHelper.php index 421254be..f6ca1927 100644 --- a/Templating/CKEditorHelper.php +++ b/Templating/CKEditorHelper.php @@ -49,7 +49,7 @@ public function __construct(ContainerInterface $container) */ public function renderBasePath($basePath) { - return $this->fixPath($this->getAssetsHelper()->getUrl($basePath)); + return $this->fixPath($this->fixUrl($basePath)); } /** @@ -61,7 +61,7 @@ public function renderBasePath($basePath) */ public function renderJsPath($jsPath) { - return $this->getAssetsHelper()->getUrl($jsPath); + return $this->fixUrl($jsPath); } /** @@ -136,7 +136,7 @@ public function renderPlugin($name, array $plugin) return sprintf( 'CKEDITOR.plugins.addExternal("%s", "%s", "%s");', $name, - $this->fixPath($this->getAssetsHelper()->getUrl($plugin['path'])), + $this->fixPath($this->fixUrl($plugin['path'])), $plugin['filename'] ); } @@ -174,9 +174,7 @@ public function renderStylesSet($name, array $stylesSet) public function renderTemplate($name, array $template) { if (isset($template['imagesPath'])) { - $template['imagesPath'] = $this->fixPath( - $this->getAssetsHelper()->getUrl($template['imagesPath']) - ); + $template['imagesPath'] = $this->fixPath($this->fixUrl($template['imagesPath'])); } $this->jsonBuilder @@ -224,7 +222,7 @@ private function fixConfigContentsCss(array $config) $config['contentsCss'] = array(); foreach ($cssContents as $cssContent) { - $config['contentsCss'][] = $this->fixPath($this->getAssetsHelper()->getUrl($cssContent)); + $config['contentsCss'][] = $this->fixPath($this->fixUrl($cssContent)); } } @@ -330,14 +328,32 @@ private function fixPath($path) return $path; } + /** + * Fixes an url. + * + * @param string $url The url. + * + * @return string The fixed url. + */ + private function fixUrl($url) + { + $assetsHelper = $this->getAssetsHelper(); + + if ($assetsHelper !== null) { + $url = $assetsHelper->getUrl($url); + } + + return $url; + } + /** * Gets the assets helper. * - * @return \Symfony\Component\Asset\Packages|\Symfony\Component\Templating\Helper\CoreAssetsHelper The assets helper. + * @return \Symfony\Component\Asset\Packages|\Symfony\Component\Templating\Helper\CoreAssetsHelper|null The assets helper. */ private function getAssetsHelper() { - return $this->container->get('assets.packages'); + return $this->container->get('assets.packages', ContainerInterface::NULL_ON_INVALID_REFERENCE); } /** diff --git a/Tests/DependencyInjection/Compiler/AssetsHelperCompilerPassTest.php b/Tests/DependencyInjection/Compiler/AssetsHelperCompilerPassTest.php index 9ec400d4..03a73898 100644 --- a/Tests/DependencyInjection/Compiler/AssetsHelperCompilerPassTest.php +++ b/Tests/DependencyInjection/Compiler/AssetsHelperCompilerPassTest.php @@ -12,7 +12,7 @@ namespace Ivory\CKEditorBundle\Tests\DependencyInjection\Compiler; use Ivory\CKEditorBundle\DependencyInjection\Compiler\AssetsHelperCompilerPass; -use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\HttpKernel\Kernel; /** * Assets helper compiler pass test. @@ -21,18 +21,15 @@ */ class AssetsHelperCompilerPassTest extends \PHPUnit_Framework_TestCase { - /** @var \Symfony\Component\Asset\Packages|\Symfony\Component\Templating\Helper\CoreAssetsHelper|\PHPUnit_Framework_MockObject_MockObject */ - private $containerBuilderMock; + /** @var \Ivory\CKEditorBundle\DependencyInjection\Compiler\AssetsHelperCompilerPass */ + private $assetsHelperCompilerPass; /** * {@inheritdoc} */ protected function setUp() { - $this->containerBuilderMock = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder') - ->setMethods(array('hasDefinition', 'setAlias')) - ->disableOriginalConstructor() - ->getMock(); + $this->assetsHelperCompilerPass = new AssetsHelperCompilerPass(); } /** @@ -43,63 +40,73 @@ protected function tearDown() unset($this->containerBuilderMock); } - public function testAssetsPackagesExists() + public function testAssetsPackagesAliasWithTemplatingHelperAssets() { - $this->containerBuilderMock + if (Kernel::VERSION_ID >= 27000) { + $this->markTestSkipped(); + } + + $container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder') + ->setMethods(array('has', 'setAlias')) + ->disableOriginalConstructor() + ->getMock(); + + $container ->expects($this->once()) - ->method('hasDefinition') - ->with('assets.packages') + ->method('has') + ->with($this->identicalTo($legacy = 'templating.helper.assets')) ->will($this->returnValue(true)); - $compilerPass = new AssetsHelperCompilerPass(); + $container + ->expects($this->once()) + ->method('setAlias') + ->with( + $this->identicalTo('assets.packages'), + $this->identicalTo($legacy) + ); - $compilerPass->process($this->containerBuilderMock); + $this->assetsHelperCompilerPass->process($container); } - public function testAssetsPackagesNotExists() + public function testAssetsPackagesAliasWithoutTemplatingHelperAssets() { - $this->containerBuilderMock - ->expects($this->at(0)) - ->method('hasDefinition') - ->with('assets.packages') - ->will($this->returnValue(false)); + if (Kernel::VERSION_ID >= 27000) { + $this->markTestSkipped(); + } - $this->containerBuilderMock - ->expects($this->at(1)) - ->method('hasDefinition') - ->with('templating.helper.assets') - ->will($this->returnValue(true)); + $container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder') + ->setMethods(array('has', 'setAlias')) + ->disableOriginalConstructor() + ->getMock(); - $this->containerBuilderMock + $container ->expects($this->once()) - ->method('setAlias') - ->with($this->equalTo('assets.packages'), $this->equalTo('templating.helper.assets')); + ->method('has') + ->with($this->identicalTo($legacy = 'templating.helper.assets')) + ->will($this->returnValue(false)); - $compilerPass = new AssetsHelperCompilerPass(); + $container + ->expects($this->never()) + ->method('setAlias'); - $compilerPass->process($this->containerBuilderMock); + $this->assetsHelperCompilerPass->process($container); } - /** - * @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException - * @expectedExceptionMessage You have requested a non-existent service "templating.helper.assets". - */ - public function testMissingService() + public function testAssetsPackagesAliasWithAssetsPackage() { - $this->containerBuilderMock - ->expects($this->at(0)) - ->method('hasDefinition') - ->with('assets.packages') - ->will($this->returnValue(false)); + if (Kernel::VERSION_ID < 27000) { + $this->markTestSkipped(); + } - $this->containerBuilderMock - ->expects($this->at(1)) - ->method('hasDefinition') - ->with('templating.helper.assets') - ->will($this->returnValue(false)); + $container = $this->getMockBuilder('Symfony\Component\DependencyInjection\ContainerBuilder') + ->setMethods(array('setAlias')) + ->disableOriginalConstructor() + ->getMock(); - $compilerPass = new AssetsHelperCompilerPass(); + $container + ->expects($this->never()) + ->method('setAlias'); - $compilerPass->process($this->containerBuilderMock); + $this->assetsHelperCompilerPass->process($container); } } diff --git a/Tests/Templating/CKEditorHelperTest.php b/Tests/Templating/CKEditorHelperTest.php index 07db2e9b..27204d6e 100644 --- a/Tests/Templating/CKEditorHelperTest.php +++ b/Tests/Templating/CKEditorHelperTest.php @@ -59,7 +59,7 @@ protected function setUp() ->will($this->returnValueMap(array( array( 'assets.packages', - ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, + ContainerInterface::NULL_ON_INVALID_REFERENCE, $this->assetsHelperMock, ), array(