Version 1
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Plugin / LazyPluginCollectionTestBase.php
diff --git a/web/core/tests/Drupal/Tests/Core/Plugin/LazyPluginCollectionTestBase.php b/web/core/tests/Drupal/Tests/Core/Plugin/LazyPluginCollectionTestBase.php
new file mode 100644 (file)
index 0000000..1974e4a
--- /dev/null
@@ -0,0 +1,148 @@
+<?php
+
+namespace Drupal\Tests\Core\Plugin;
+
+use Drupal\Core\Plugin\DefaultLazyPluginCollection;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * Provides a base class for plugin collection tests.
+ */
+abstract class LazyPluginCollectionTestBase extends UnitTestCase {
+
+  /**
+   * The mocked plugin manager.
+   *
+   * @var \Drupal\Component\Plugin\PluginManagerInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $pluginManager;
+
+  /**
+   * The tested plugin collection.
+   *
+   * @var \Drupal\Core\Plugin\DefaultLazyPluginCollection|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $defaultPluginCollection;
+
+  /**
+   * Stores all setup plugin instances.
+   *
+   * @var \Drupal\Component\Plugin\PluginInspectionInterface[]
+   */
+  protected $pluginInstances;
+
+  /**
+   * Contains the plugin configuration.
+   *
+   * @var array
+   */
+  protected $config = [
+    'banana' => ['id' => 'banana', 'key' => 'value'],
+    'cherry' => ['id' => 'cherry', 'key' => 'value'],
+    'apple' => ['id' => 'apple', 'key' => 'value'],
+  ];
+
+  protected function setUp() {
+    $this->pluginManager = $this->getMock('Drupal\Component\Plugin\PluginManagerInterface');
+    $this->pluginManager->expects($this->any())
+      ->method('getDefinitions')
+      ->will($this->returnValue($this->getPluginDefinitions()));
+
+  }
+
+  /**
+   * Sets up the default plugin collection.
+   *
+   * @param \PHPUnit_Framework_MockObject_Matcher_InvokedRecorder|null $create_count
+   *   (optional) The number of times that createInstance() is expected to be
+   *   called. For example, $this->any(), $this->once(), $this->exactly(6).
+   *   Defaults to $this->never().
+   */
+  protected function setupPluginCollection(\PHPUnit_Framework_MockObject_Matcher_InvokedRecorder $create_count = NULL) {
+    $this->pluginInstances = [];
+    $map = [];
+    foreach ($this->getPluginDefinitions() as $plugin_id => $definition) {
+      // Create a mock plugin instance.
+      $this->pluginInstances[$plugin_id] = $this->getPluginMock($plugin_id, $definition);
+
+      $map[] = [$plugin_id, $this->config[$plugin_id], $this->pluginInstances[$plugin_id]];
+    }
+    $create_count = $create_count ?: $this->never();
+    $this->pluginManager->expects($create_count)
+      ->method('createInstance')
+      ->will($this->returnCallback([$this, 'returnPluginMap']));
+
+    $this->defaultPluginCollection = new DefaultLazyPluginCollection($this->pluginManager, $this->config);
+  }
+
+  /**
+   * Return callback for createInstance.
+   *
+   * @param string $plugin_id
+   *   The plugin ID to return the mock plugin for.
+   *
+   * @return \Drupal\Component\Plugin\PluginInspectionInterface|\PHPUnit_Framework_MockObject_MockObject
+   *   The mock plugin object.
+   */
+  public function returnPluginMap($plugin_id) {
+    if (isset($this->pluginInstances[$plugin_id])) {
+      return $this->pluginInstances[$plugin_id];
+    }
+  }
+
+  /**
+   * Returns a mocked plugin object.
+   *
+   * @param string $plugin_id
+   *   The plugin ID.
+   * @param array $definition
+   *   The plugin definition.
+   *
+   * @return \Drupal\Component\Plugin\PluginInspectionInterface|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected function getPluginMock($plugin_id, array $definition) {
+    // Create a mock plugin instance.
+    $mock = $this->getMock('Drupal\Component\Plugin\PluginInspectionInterface');
+    $mock->expects($this->any())
+      ->method('getPluginId')
+      ->will($this->returnValue($plugin_id));
+    return $mock;
+  }
+
+  /**
+   * Returns some example plugin definitions.
+   *
+   * @return array
+   *   The example plugin definitions.
+   */
+  protected function getPluginDefinitions() {
+    $definitions = [
+      'apple' => [
+        'id' => 'apple',
+        'label' => 'Apple',
+        'color' => 'green',
+        'class' => 'Drupal\plugin_test\Plugin\plugin_test\fruit\Apple',
+        'provider' => 'plugin_test',
+      ],
+      'banana' => [
+        'id' => 'banana',
+        'label' => 'Banana',
+        'color' => 'yellow',
+        'uses' => [
+          'bread' => 'Banana bread',
+        ],
+        'class' => 'Drupal\plugin_test\Plugin\plugin_test\fruit\Banana',
+        'provider' => 'plugin_test',
+      ],
+      'cherry' => [
+        'id' => 'cherry',
+        'label' => 'Cherry',
+        'color' => 'red',
+        'class' => 'Drupal\plugin_test\Plugin\plugin_test\fruit\Cherry',
+        'provider' => 'plugin_test',
+      ],
+    ];
+    return $definitions;
+  }
+
+}