bug #14708 [TwigBridge] use proper class to fetch asset version strategy property (xabbuh)

This PR was merged into the 2.7 branch.

Discussion
----------

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

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #14692
| License       | MIT
| Doc PR        |

Commits
-------

01b7dd6 [TwigBridge] use proper class to fetch asset version strategy property
This commit is contained in:
Fabien Potencier 2015-05-21 09:31:29 +02:00
commit b248bd1ee1
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);
}
}