diff --git a/src/Symfony/Bridge/Twig/Extension/AssetExtension.php b/src/Symfony/Bridge/Twig/Extension/AssetExtension.php index 3e9e9f6a78..b094252b08 100644 --- a/src/Symfony/Bridge/Twig/Extension/AssetExtension.php +++ b/src/Symfony/Bridge/Twig/Extension/AssetExtension.php @@ -98,10 +98,14 @@ class AssetExtension extends \Twig_Extension { if ($version) { $package = $this->packages->getPackage($packageName); + $class = new \ReflectionClass($package); - $v = new \ReflectionProperty($package, 'versionStrategy'); + while ('Symfony\Component\Asset\Package' !== $class->getName()) { + $class = $class->getParentClass(); + } + + $v = $class->getProperty('versionStrategy'); $v->setAccessible(true); - $currentVersionStrategy = $v->getValue($package); $f = new \ReflectionProperty($currentVersionStrategy, 'format'); diff --git a/src/Symfony/Bridge/Twig/Tests/Extension/AssetExtensionTest.php b/src/Symfony/Bridge/Twig/Tests/Extension/AssetExtensionTest.php index 51432473d1..ab73179394 100644 --- a/src/Symfony/Bridge/Twig/Tests/Extension/AssetExtensionTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Extension/AssetExtensionTest.php @@ -14,6 +14,7 @@ namespace Symfony\Bridge\Twig\Tests\Extension; use Symfony\Bridge\Twig\Extension\AssetExtension; use Symfony\Component\Asset\Package; use Symfony\Component\Asset\Packages; +use Symfony\Component\Asset\PathPackage; use Symfony\Component\Asset\VersionStrategy\StaticVersionStrategy; class AssetExtensionTest extends \PHPUnit_Framework_TestCase @@ -23,8 +24,25 @@ class AssetExtensionTest extends \PHPUnit_Framework_TestCase */ public function testLegacyGetAssetUrl() { - $this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED); + $extension = $this->createExtension(new Package(new StaticVersionStrategy('22', '%s?version=%s'))); + $this->assertEquals('me.png?version=42', $extension->getAssetUrl('me.png', null, false, '42')); + $this->assertEquals('http://localhost/me.png?version=22', $extension->getAssetUrl('me.png', null, true)); + $this->assertEquals('http://localhost/me.png?version=42', $extension->getAssetUrl('me.png', null, true, '42')); + } + + /** + * @group legacy + */ + public function testGetAssetUrlWithPackageSubClass() + { + $extension = $this->createExtension(new PathPackage('foo', new StaticVersionStrategy('22', '%s?version=%s'))); + + $this->assertEquals('/foo/me.png?version=42', $extension->getAssetUrl('me.png', null, false, 42)); + } + + private function createExtension(Package $package) + { $foundationExtension = $this->getMockBuilder('Symfony\Bridge\Twig\Extension\HttpFoundationExtension')->disableOriginalConstructor()->getMock(); $foundationExtension ->expects($this->any()) @@ -32,12 +50,6 @@ class AssetExtensionTest extends \PHPUnit_Framework_TestCase ->will($this->returnCallback(function ($arg) { return 'http://localhost/'.$arg; })) ; - $package = new Package(new StaticVersionStrategy('22', '%s?version=%s')); - $packages = new Packages($package); - $extension = new AssetExtension($packages, $foundationExtension); - - $this->assertEquals('me.png?version=42', $extension->getAssetUrl('me.png', null, false, '42')); - $this->assertEquals('http://localhost/me.png?version=22', $extension->getAssetUrl('me.png', null, true)); - $this->assertEquals('http://localhost/me.png?version=42', $extension->getAssetUrl('me.png', null, true, '42')); + return new AssetExtension(new Packages($package), $foundationExtension); } }