Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\Component\Plugin;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
|
Chris@0
|
6 use PHPUnit\Framework\TestCase;
|
Chris@0
|
7
|
Chris@0
|
8 /**
|
Chris@0
|
9 * @coversDefaultClass \Drupal\Component\Plugin\PluginManagerBase
|
Chris@0
|
10 * @group Plugin
|
Chris@0
|
11 */
|
Chris@0
|
12 class PluginManagerBaseTest extends TestCase {
|
Chris@0
|
13
|
Chris@0
|
14 /**
|
Chris@0
|
15 * A callback method for mocking FactoryInterface objects.
|
Chris@0
|
16 */
|
Chris@0
|
17 public function createInstanceCallback() {
|
Chris@0
|
18 $args = func_get_args();
|
Chris@0
|
19 $plugin_id = $args[0];
|
Chris@0
|
20 $configuration = $args[1];
|
Chris@0
|
21 if ('invalid' == $plugin_id) {
|
Chris@0
|
22 throw new PluginNotFoundException($plugin_id);
|
Chris@0
|
23 }
|
Chris@0
|
24 return [
|
Chris@0
|
25 'plugin_id' => $plugin_id,
|
Chris@0
|
26 'configuration' => $configuration,
|
Chris@0
|
27 ];
|
Chris@0
|
28 }
|
Chris@0
|
29
|
Chris@0
|
30 /**
|
Chris@0
|
31 * Generates a mocked FactoryInterface object with known properties.
|
Chris@0
|
32 */
|
Chris@0
|
33 public function getMockFactoryInterface($expects_count) {
|
Chris@0
|
34 $mock_factory = $this->getMockBuilder('Drupal\Component\Plugin\Factory\FactoryInterface')
|
Chris@0
|
35 ->setMethods(['createInstance'])
|
Chris@0
|
36 ->getMockForAbstractClass();
|
Chris@0
|
37 $mock_factory->expects($this->exactly($expects_count))
|
Chris@0
|
38 ->method('createInstance')
|
Chris@0
|
39 ->willReturnCallback([$this, 'createInstanceCallback']);
|
Chris@0
|
40 return $mock_factory;
|
Chris@0
|
41 }
|
Chris@0
|
42
|
Chris@0
|
43 /**
|
Chris@0
|
44 * Tests createInstance() with no fallback methods.
|
Chris@0
|
45 *
|
Chris@0
|
46 * @covers ::createInstance
|
Chris@0
|
47 */
|
Chris@0
|
48 public function testCreateInstance() {
|
Chris@0
|
49 $manager = $this->getMockBuilder('Drupal\Component\Plugin\PluginManagerBase')
|
Chris@0
|
50 ->getMockForAbstractClass();
|
Chris@0
|
51 // PluginManagerBase::createInstance() looks for a factory object and then
|
Chris@0
|
52 // calls createInstance() on it. So we have to mock a factory object.
|
Chris@0
|
53 $factory_ref = new \ReflectionProperty($manager, 'factory');
|
Chris@0
|
54 $factory_ref->setAccessible(TRUE);
|
Chris@0
|
55 $factory_ref->setValue($manager, $this->getMockFactoryInterface(1));
|
Chris@0
|
56
|
Chris@0
|
57 // Finally the test.
|
Chris@0
|
58 $configuration_array = ['config' => 'something'];
|
Chris@0
|
59 $result = $manager->createInstance('valid', $configuration_array);
|
Chris@0
|
60 $this->assertEquals('valid', $result['plugin_id']);
|
Chris@0
|
61 $this->assertEquals($configuration_array, $result['configuration']);
|
Chris@0
|
62 }
|
Chris@0
|
63
|
Chris@0
|
64 /**
|
Chris@0
|
65 * Tests createInstance() with a fallback method.
|
Chris@0
|
66 *
|
Chris@0
|
67 * @covers ::createInstance
|
Chris@0
|
68 */
|
Chris@0
|
69 public function testCreateInstanceFallback() {
|
Chris@0
|
70 // We use our special stub class which extends PluginManagerBase and also
|
Chris@0
|
71 // implements FallbackPluginManagerInterface.
|
Chris@0
|
72 $manager = new StubFallbackPluginManager();
|
Chris@0
|
73 // Put our stubbed factory on the base object.
|
Chris@0
|
74 $factory_ref = new \ReflectionProperty($manager, 'factory');
|
Chris@0
|
75 $factory_ref->setAccessible(TRUE);
|
Chris@0
|
76
|
Chris@0
|
77 // Set up the configuration array.
|
Chris@0
|
78 $configuration_array = ['config' => 'something'];
|
Chris@0
|
79
|
Chris@0
|
80 // Test with fallback interface and valid plugin_id.
|
Chris@0
|
81 $factory_ref->setValue($manager, $this->getMockFactoryInterface(1));
|
Chris@0
|
82 $no_fallback_result = $manager->createInstance('valid', $configuration_array);
|
Chris@0
|
83 $this->assertEquals('valid', $no_fallback_result['plugin_id']);
|
Chris@0
|
84 $this->assertEquals($configuration_array, $no_fallback_result['configuration']);
|
Chris@0
|
85
|
Chris@0
|
86 // Test with fallback interface and invalid plugin_id.
|
Chris@0
|
87 $factory_ref->setValue($manager, $this->getMockFactoryInterface(2));
|
Chris@0
|
88 $fallback_result = $manager->createInstance('invalid', $configuration_array);
|
Chris@0
|
89 $this->assertEquals('invalid_fallback', $fallback_result['plugin_id']);
|
Chris@0
|
90 $this->assertEquals($configuration_array, $fallback_result['configuration']);
|
Chris@0
|
91 }
|
Chris@0
|
92
|
Chris@0
|
93 }
|