|
@@ -29,6 +29,8 @@ class ExtensionCompilerPassTest extends \PHPUnit_Framework_TestCase
|
|
|
private $orderExtension;
|
|
|
private $securityExtension;
|
|
|
private $filterExtension;
|
|
|
+ private $timestampExtension;
|
|
|
+ private $hasTraits;
|
|
|
|
|
|
/**
|
|
|
* Root name of the configuration
|
|
@@ -42,12 +44,14 @@ class ExtensionCompilerPassTest extends \PHPUnit_Framework_TestCase
|
|
|
$this->extension = new SonataAdminExtension();
|
|
|
$this->config = $this->getConfig();
|
|
|
$this->root = 'sonata.admin';
|
|
|
+ $this->hasTraits = version_compare(PHP_VERSION, '5.4.0', '>=');
|
|
|
|
|
|
$this->publishExtension = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
|
|
|
$this->historyExtension = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
|
|
|
$this->orderExtension = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
|
|
|
$this->securityExtension = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
|
|
|
$this->filterExtension = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
|
|
|
+ $this->timestampExtension = $this->getMock('Sonata\AdminBundle\Admin\AdminExtensionInterface');
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -65,6 +69,7 @@ class ExtensionCompilerPassTest extends \PHPUnit_Framework_TestCase
|
|
|
$this->assertArrayHasKey('implements', $extensionMap);
|
|
|
$this->assertArrayHasKey('extends', $extensionMap);
|
|
|
$this->assertArrayHasKey('instanceof', $extensionMap);
|
|
|
+ $this->assertArrayHasKey('uses', $extensionMap);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -87,12 +92,14 @@ class ExtensionCompilerPassTest extends \PHPUnit_Framework_TestCase
|
|
|
$this->assertArrayHasKey('implements', $extensionMap);
|
|
|
$this->assertArrayHasKey('extends', $extensionMap);
|
|
|
$this->assertArrayHasKey('instanceof', $extensionMap);
|
|
|
+ $this->assertArrayHasKey('uses', $extensionMap);
|
|
|
|
|
|
$this->assertEmpty($extensionMap['admins']);
|
|
|
$this->assertEmpty($extensionMap['excludes']);
|
|
|
$this->assertEmpty($extensionMap['implements']);
|
|
|
$this->assertEmpty($extensionMap['extends']);
|
|
|
$this->assertEmpty($extensionMap['instanceof']);
|
|
|
+ $this->assertEmpty($extensionMap['uses']);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -154,6 +161,19 @@ class ExtensionCompilerPassTest extends \PHPUnit_Framework_TestCase
|
|
|
$this->assertArrayHasKey('Sonata\AdminBundle\Tests\DependencyInjection\Post', $extensionMap['instanceof']);
|
|
|
$this->assertCount(1, $extensionMap['instanceof']['Sonata\AdminBundle\Tests\DependencyInjection\Post']);
|
|
|
$this->assertContains('sonata_extension_history', $extensionMap['instanceof']['Sonata\AdminBundle\Tests\DependencyInjection\Post']);
|
|
|
+
|
|
|
+ // Uses
|
|
|
+ $this->assertArrayHasKey('uses', $extensionMap);
|
|
|
+
|
|
|
+ if ($this->hasTraits) {
|
|
|
+ $this->assertCount(1, $extensionMap['uses']);
|
|
|
+ $this->assertArrayHasKey('Sonata\AdminBundle\Tests\Fixtures\DependencyInjection\TimestampableTrait', $extensionMap['uses']);
|
|
|
+ $this->assertCount(1, $extensionMap['uses']['Sonata\AdminBundle\Tests\Fixtures\DependencyInjection\TimestampableTrait']);
|
|
|
+ $this->assertContains('sonata_extension_post', $extensionMap['uses']['Sonata\AdminBundle\Tests\Fixtures\DependencyInjection\TimestampableTrait']);
|
|
|
+ } else {
|
|
|
+ $this->assertCount(0, $extensionMap['uses']);
|
|
|
+ $this->assertArrayNotHasKey('Sonata\AdminBundle\Tests\Fixtures\DependencyInjection\TimestampableTrait', $extensionMap['uses']);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -219,6 +239,7 @@ class ExtensionCompilerPassTest extends \PHPUnit_Framework_TestCase
|
|
|
$this->assertTrue($container->hasDefinition('sonata_extension_history'));
|
|
|
$this->assertTrue($container->hasDefinition('sonata_extension_order'));
|
|
|
$this->assertTrue($container->hasDefinition('sonata_extension_security'));
|
|
|
+ $this->assertTrue($container->hasDefinition('sonata_extension_timestamp'));
|
|
|
|
|
|
$this->assertTrue($container->hasDefinition('sonata_post_admin'));
|
|
|
$this->assertTrue($container->hasDefinition('sonata_article_admin'));
|
|
@@ -250,6 +271,28 @@ class ExtensionCompilerPassTest extends \PHPUnit_Framework_TestCase
|
|
|
$this->assertInstanceOf(get_class($this->filterExtension), $extensions[4]);
|
|
|
}
|
|
|
|
|
|
+ public function testProcessThrowsExceptionIfTraitsAreNotAvailable()
|
|
|
+ {
|
|
|
+ if (!$this->hasTraits) {
|
|
|
+ $this->setExpectedException('\Symfony\Component\Config\Definition\Exception\InvalidConfigurationException', 'PHP >= 5.4.0 is required to use traits.');
|
|
|
+ }
|
|
|
+
|
|
|
+ $config = array(
|
|
|
+ 'extensions' => array(
|
|
|
+ 'sonata_extension_post' => array(
|
|
|
+ 'uses' => array('Sonata\AdminBundle\Tests\Fixtures\DependencyInjection\TimestampableTrait'),
|
|
|
+ ),
|
|
|
+ )
|
|
|
+ );
|
|
|
+
|
|
|
+ $container = $this->getContainer();
|
|
|
+ $this->extension->load(array($config), $container);
|
|
|
+
|
|
|
+ $extensionsPass = new ExtensionCompilerPass();
|
|
|
+ $extensionsPass->process($container);
|
|
|
+ $container->compile();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* @return array
|
|
|
*/
|
|
@@ -273,6 +316,10 @@ class ExtensionCompilerPassTest extends \PHPUnit_Framework_TestCase
|
|
|
)
|
|
|
);
|
|
|
|
|
|
+ if ($this->hasTraits) {
|
|
|
+ $config['extensions']['sonata_extension_post']['uses'] = array('Sonata\AdminBundle\Tests\Fixtures\DependencyInjection\TimestampableTrait');
|
|
|
+ }
|
|
|
+
|
|
|
return $config;
|
|
|
}
|
|
|
|
|
@@ -342,6 +389,9 @@ class ExtensionCompilerPassTest extends \PHPUnit_Framework_TestCase
|
|
|
$container
|
|
|
->register('sonata_extension_order')
|
|
|
->setClass(get_class($this->orderExtension));
|
|
|
+ $container
|
|
|
+ ->register('sonata_extension_timestamp')
|
|
|
+ ->setClass(get_class($this->timestampExtension));
|
|
|
$container
|
|
|
->register('sonata_extension_security')
|
|
|
->setClass(get_class($this->securityExtension))
|