[TwigBridge] use proper class to fetch asset version strategy property

This commit is contained in:
Christian Flothmann 2015-05-20 21:22:35 +02:00
parent 2213e67279
commit 01b7dd6d9f
2 changed files with 26 additions and 10 deletions

View File

@ -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');

View File

@ -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);
}
}