Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorThomas Steur <tsteur@users.noreply.github.com>2017-05-09 11:29:18 +0300
committerMatthieu Aubry <mattab@users.noreply.github.com>2017-05-09 11:29:18 +0300
commit51e34b5d8b6d65e95707a7a4388cf2337fadddbc (patch)
tree80e43fda1b5cf6050f35d84c7e6bc8a975e84f49 /tests
parentdefc5469a5d4634d64023477a447a31c58812a12 (diff)
Automatically load required plugins during test (#11675)
* Automatically load required plugins during test When a plugin requires another plugin in `plugin.json`, this will make sure to load the required plugin as well (if it exists in filesystem) when running the tests. * Load plugin json manually without metadata loader as container is not created yet * only load plugin.json if it exists
Diffstat (limited to 'tests')
-rw-r--r--tests/PHPUnit/Framework/TestingEnvironmentManipulator.php29
1 files changed, 27 insertions, 2 deletions
diff --git a/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php b/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php
index df6a011af5..1aa1a74de8 100644
--- a/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php
+++ b/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php
@@ -213,21 +213,46 @@ class TestingEnvironmentManipulator implements EnvironmentManipulator
Plugin::getPluginNameFromNamespace(get_called_class())
)
);
+
foreach ($extraPlugins as $pluginName) {
if (empty($pluginName)) {
continue;
}
- if (in_array($pluginName, $plugins)) {
- continue;
+ $plugins = $this->getPluginAndRequiredPlugins($pluginName, $plugins);
+ }
+
+ return $plugins;
+ }
+
+ private function getPluginAndRequiredPlugins($pluginName, $plugins)
+ {
+ $pluginJsonPath = $this->makePathToPluginJson($pluginName);
+
+ if (file_exists($pluginJsonPath)) {
+ $pluginJson = json_decode(trim(file_get_contents($pluginJsonPath)), true);
+
+ if (!empty($pluginJson['require'])) {
+ foreach ($pluginJson['require'] as $possiblePluginName => $requiredVersion) {
+ if (file_exists($this->makePathToPluginJson($possiblePluginName))) {
+ $plugins = $this->getPluginAndRequiredPlugins($possiblePluginName, $plugins);
+ }
+ }
}
+ }
+ if (!in_array($pluginName, $plugins)) {
$plugins[] = $pluginName;
}
return $plugins;
}
+ private function makePathToPluginJson($pluginName)
+ {
+ return Plugin\Manager::getPluginsDirectory() . $pluginName . '/' . Plugin\MetadataLoader::PLUGIN_JSON_FILENAME;
+ }
+
private function classExists($klass)
{
if (class_exists($klass)) {