Further modules included.
[yaffs-website] / web / modules / contrib / drupalmoduleupgrader / tests / src / Unit / TestBase.php
diff --git a/web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/TestBase.php b/web/modules/contrib/drupalmoduleupgrader/tests/src/Unit/TestBase.php
new file mode 100644 (file)
index 0000000..d3c324f
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+
+namespace Drupal\Tests\drupalmoduleupgrader\Unit;
+
+use Drupal\drupalmoduleupgrader\Target;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * Base class for all DMU tests, providing a useful environment:
+ *
+ * - A module called foo, mocked in memory using vfsStream. The actual
+ *   module files are empty and should be filled in by subclasses.
+ * - A TargetInterface instance for the foo module.
+ * - A Drupal database connection to an empty in-memory SQLite database.
+ * - A container with mocked string_translation and logger.factory services.
+ */
+abstract class TestBase extends UnitTestCase {
+
+  use ContainerMockTrait;
+  use SQLiteDatabaseTrait;
+  use ModuleMockerTrait;
+
+  /**
+   * The parsed annotations for the test class and method being executed.
+   *
+   * @var array
+   */
+  protected $info;
+
+  /**
+   * @var \org\bovigo\vfs\vfsStreamDirectory
+   */
+  protected $dir;
+
+  /**
+   * @var \Drupal\drupalmoduleupgrader\TargetInterface
+   */
+  protected $target;
+
+  /**
+   * Mocks an entire module, called foo, in a virtual file system.
+   */
+  public function setUp() {
+    $this->info = $this->getAnnotations();
+
+    $this->dir = $this->mockModule('foo');
+
+    $this->mockContainer();
+    $this->mockTranslator();
+    $this->mockLogger();
+    $this->initDB();
+
+    // At the time of this writing, Target will pull the indexer manager out
+    // of the container right away, so let's mock it.
+    $indexers = $this->getMock('\Drupal\Component\Plugin\PluginManagerInterface');
+    $this->container->set('plugin.manager.drupalmoduleupgrader.indexer', $indexers);
+
+    $this->target = new Target($this->dir->url(), $this->container);
+  }
+
+  /**
+   * Instantiates the plugin class covered by this test (as indicated by the
+   * @covers annotation). The plugin instance is given a randomly generated
+   * ID and description. Dependencies will be pulled from $this->container,
+   * so this should only be called once the mock container is ready.
+   *
+   * @param array $configuration
+   *  Additional configuration to pass to the instance.
+   * @param array $plugin_definition
+   *  Additional definition info to pass to the instance.
+   *
+   * @return object
+   *  A plugin instance.
+   */
+  protected function getPlugin(array $configuration = [], $plugin_definition = []) {
+    $plugin_definition['description'] = $this->getRandomGenerator()->sentences(4);
+
+    $class = $this->info['class']['covers'][0];
+    return $class::create($this->container, $configuration, $this->randomMachineName(), $plugin_definition);
+  }
+
+}