View source
<?php
namespace Drupal\Tests\Core\Plugin;
use Drupal\Tests\UnitTestCase;
class DefaultPluginManagerTest extends UnitTestCase {
protected $expectedDefinitions;
protected $namespaces;
protected function setUp() {
$this->expectedDefinitions = array(
'apple' => array(
'id' => 'apple',
'label' => 'Apple',
'color' => 'green',
'class' => 'Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\Apple',
),
'banana' => array(
'id' => 'banana',
'label' => 'Banana',
'color' => 'yellow',
'uses' => array(
'bread' => 'Banana bread',
),
'class' => 'Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\Banana',
),
);
$this->namespaces = new \ArrayObject();
$this->namespaces['Drupal\\plugin_test'] = $this->root . '/core/modules/system/tests/modules/plugin_test/src';
}
public function testDefaultPluginManagerWithDisabledModule() {
$definitions = $this->expectedDefinitions;
$definitions['cherry'] = array(
'id' => 'cherry',
'label' => 'Cherry',
'color' => 'red',
'class' => 'Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\Cherry',
'provider' => 'disabled_module',
);
$module_handler = $this
->getMock('Drupal\\Core\\Extension\\ModuleHandlerInterface');
$module_handler
->expects($this
->once())
->method('moduleExists')
->with('disabled_module')
->will($this
->returnValue(FALSE));
$plugin_manager = new TestPluginManager($this->namespaces, $definitions, $module_handler, 'test_alter_hook', '\\Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\FruitInterface');
$this
->assertEmpty($plugin_manager
->getDefinition('cherry', FALSE), 'Plugin information of a disabled module is not available');
}
public function testDefaultPluginManagerWithObjects() {
$definitions = $this->expectedDefinitions;
$definitions['cherry'] = (object) array(
'id' => 'cherry',
'label' => 'Cherry',
'color' => 'red',
'class' => 'Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\Cherry',
'provider' => 'disabled_module',
);
$module_handler = $this
->getMock('Drupal\\Core\\Extension\\ModuleHandlerInterface');
$module_handler
->expects($this
->once())
->method('moduleExists')
->with('disabled_module')
->will($this
->returnValue(FALSE));
$plugin_manager = new TestPluginManager($this->namespaces, $definitions, $module_handler, 'test_alter_hook', '\\Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\FruitInterface');
$this
->assertEmpty($plugin_manager
->getDefinition('cherry', FALSE), 'Plugin information is available');
}
public function testDefaultPluginManager() {
$plugin_manager = new TestPluginManager($this->namespaces, $this->expectedDefinitions, NULL, NULL, '\\Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\FruitInterface');
$this
->assertEquals($this->expectedDefinitions, $plugin_manager
->getDefinitions());
$this
->assertEquals($this->expectedDefinitions['banana'], $plugin_manager
->getDefinition('banana'));
}
public function testDefaultPluginManagerWithAlter() {
$module_handler = $this
->getMockBuilder('Drupal\\Core\\Extension\\ModuleHandler')
->disableOriginalConstructor()
->getMock();
$alter_hook_name = $this
->randomMachineName();
$module_handler
->expects($this
->once())
->method('alter')
->with($this
->equalTo($alter_hook_name), $this
->equalTo($this->expectedDefinitions));
$plugin_manager = new TestPluginManager($this->namespaces, $this->expectedDefinitions, $module_handler, $alter_hook_name, '\\Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\FruitInterface');
$this
->assertEquals($this->expectedDefinitions, $plugin_manager
->getDefinitions());
$this
->assertEquals($this->expectedDefinitions['banana'], $plugin_manager
->getDefinition('banana'));
}
public function testDefaultPluginManagerWithEmptyCache() {
$cid = $this
->randomMachineName();
$cache_backend = $this
->getMockBuilder('Drupal\\Core\\Cache\\MemoryBackend')
->disableOriginalConstructor()
->getMock();
$cache_backend
->expects($this
->once())
->method('get')
->with($cid)
->will($this
->returnValue(FALSE));
$cache_backend
->expects($this
->once())
->method('set')
->with($cid, $this->expectedDefinitions);
$plugin_manager = new TestPluginManager($this->namespaces, $this->expectedDefinitions, NULL, NULL, '\\Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\FruitInterface');
$plugin_manager
->setCacheBackend($cache_backend, $cid);
$this
->assertEquals($this->expectedDefinitions, $plugin_manager
->getDefinitions());
$this
->assertEquals($this->expectedDefinitions['banana'], $plugin_manager
->getDefinition('banana'));
}
public function testDefaultPluginManagerWithFilledCache() {
$cid = $this
->randomMachineName();
$cache_backend = $this
->getMockBuilder('Drupal\\Core\\Cache\\MemoryBackend')
->disableOriginalConstructor()
->getMock();
$cache_backend
->expects($this
->once())
->method('get')
->with($cid)
->will($this
->returnValue((object) array(
'data' => $this->expectedDefinitions,
)));
$cache_backend
->expects($this
->never())
->method('set');
$plugin_manager = new TestPluginManager($this->namespaces, $this->expectedDefinitions, NULL, NULL, '\\Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\FruitInterface');
$plugin_manager
->setCacheBackend($cache_backend, $cid);
$this
->assertEquals($this->expectedDefinitions, $plugin_manager
->getDefinitions());
}
public function testDefaultPluginManagerNoCache() {
$plugin_manager = new TestPluginManager($this->namespaces, $this->expectedDefinitions, NULL, NULL, '\\Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\FruitInterface');
$cid = $this
->randomMachineName();
$cache_backend = $this
->getMockBuilder('Drupal\\Core\\Cache\\MemoryBackend')
->disableOriginalConstructor()
->getMock();
$cache_backend
->expects($this
->never())
->method('get');
$cache_backend
->expects($this
->never())
->method('set');
$plugin_manager
->setCacheBackend($cache_backend, $cid);
$plugin_manager
->useCaches(FALSE);
$this
->assertEquals($this->expectedDefinitions, $plugin_manager
->getDefinitions());
$this
->assertEquals($this->expectedDefinitions['banana'], $plugin_manager
->getDefinition('banana'));
}
public function testCacheClearWithTags() {
$cid = $this
->randomMachineName();
$cache_backend = $this
->getMock('Drupal\\Core\\Cache\\CacheBackendInterface');
$cache_tags_invalidator = $this
->getMock('Drupal\\Core\\Cache\\CacheTagsInvalidatorInterface');
$cache_tags_invalidator
->expects($this
->once())
->method('invalidateTags')
->with(array(
'tag',
));
$cache_backend
->expects($this
->never())
->method('deleteMultiple');
$this
->getContainerWithCacheTagsInvalidator($cache_tags_invalidator);
$plugin_manager = new TestPluginManager($this->namespaces, $this->expectedDefinitions, NULL, NULL, '\\Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\FruitInterface');
$plugin_manager
->setCacheBackend($cache_backend, $cid, array(
'tag',
));
$plugin_manager
->clearCachedDefinitions();
}
public function testCreateInstanceWithJustValidInterfaces() {
$plugin_manager = new TestPluginManager($this->namespaces, $this->expectedDefinitions, NULL, NULL, '\\Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\FruitInterface');
foreach ($this->expectedDefinitions as $plugin_id => $definition) {
$this
->assertNotNull($plugin_manager
->createInstance($plugin_id));
}
}
public function testCreateInstanceWithInvalidInterfaces() {
$module_handler = $this
->getMock('Drupal\\Core\\Extension\\ModuleHandlerInterface');
$module_handler
->expects($this
->any())
->method('moduleExists')
->with('plugin_test')
->willReturn(TRUE);
$this->expectedDefinitions['kale'] = array(
'id' => 'kale',
'label' => 'Kale',
'color' => 'green',
'class' => 'Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\Kale',
'provider' => 'plugin_test',
);
$this->expectedDefinitions['apple']['provider'] = 'plugin_test';
$this->expectedDefinitions['banana']['provider'] = 'plugin_test';
$plugin_manager = new TestPluginManager($this->namespaces, $this->expectedDefinitions, $module_handler, NULL, '\\Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\FruitInterface');
$plugin_manager
->createInstance('kale');
}
public function testGetDefinitionsWithoutRequiredInterface() {
$module_handler = $this
->getMock('Drupal\\Core\\Extension\\ModuleHandlerInterface');
$module_handler
->expects($this
->any())
->method('moduleExists')
->with('plugin_test')
->willReturn(FALSE);
$this->expectedDefinitions['kale'] = array(
'id' => 'kale',
'label' => 'Kale',
'color' => 'green',
'class' => 'Drupal\\plugin_test\\Plugin\\plugin_test\\fruit\\Kale',
'provider' => 'plugin_test',
);
$this->expectedDefinitions['apple']['provider'] = 'plugin_test';
$this->expectedDefinitions['banana']['provider'] = 'plugin_test';
$plugin_manager = new TestPluginManager($this->namespaces, $this->expectedDefinitions, $module_handler, NULL);
$this
->assertInternalType('array', $plugin_manager
->getDefinitions());
}
}