annotate core/tests/Drupal/Tests/Component/Plugin/PluginManagerBaseTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 129ea1e6d783
rev   line source
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 }