pluginList = $this->makePluginList(); } public function testSortPlugins() { $pluginList = $this->makePluginList(); $sorted = $pluginList->sortPlugins(array('UsersManager', 'CoreHome', 'MyCustomPlugin', 'ExampleCommand', 'MyCustomPlugin2', 'Abcdef')); $this->assertSame(array( 'CoreHome', // core plugins loaded first 'UsersManager', 'ExampleCommand', // a "by default disabled plugin" is loaded before custom plugins 'Abcdef', // then we load custom plugins 'MyCustomPlugin', 'MyCustomPlugin2', ), $sorted); } public function testSortPluginsOnlyCorePlugins() { $pluginList = $this->makePluginList(); $sorted = $pluginList->sortPlugins(array('UsersManager', 'CoreHome')); $this->assertSame(array('CoreHome','UsersManager'), $sorted); } public function testSortPluginsAndRespectDependenciesSortsPluginsAlphabetically() { $pluginList = $this->makePluginList(); $sorted = $pluginList->sortPluginsAndRespectDependencies(array( 'UsersManager', 'MyCustomPlugin', 'ExampleCommand', 'MyCustomPlugin2', 'CoreHome', 'Abcdef', )); $this->assertSame(array( 'CoreHome', // core plugins loaded first 'UsersManager', 'ExampleCommand', // a "by default disabled plugin" is loaded before custom plugins 'Abcdef', // then we load custom plugins 'MyCustomPlugin', 'MyCustomPlugin2', ), $sorted); } public function testSortPluginsAndRespectDependenciesMakesSureToListRequiredDependencyFirst() { $pluginJsonInfo = array( 'Abcdef' => array('require' => array('MyCustomPlugin2' => '2.2.1')), 'MyCustomPlugin2' => array('require' => array('CoreHome' => '4.2.1', 'MyCustomPlugin3' => '3.0.3')), 'fooBar' => array('require' => array('Ast' => '1.2.1', 'MyCustomPlugin3' => '3.0.3')), ); $pluginList = $this->makePluginList(); $sorted = $pluginList->sortPluginsAndRespectDependencies(array( 'UsersManager', 'MyCustomPlugin', 'ExampleCommand', 'MyCustomPlugin2', 'Ast', 'Acc', 'MyCustomPlugin3', 'CoreHome', 'Abcdef', 'fooBar', ), $pluginJsonInfo); $this->assertSame(array( 'CoreHome', // core plugins loaded first 'UsersManager', 'ExampleCommand', // a "by default disabled plugin" is loaded before custom plugins 'MyCustomPlugin3', 'MyCustomPlugin2', 'Abcdef', 'Acc', 'Ast', 'fooBar', 'MyCustomPlugin', ), $sorted); } public function testSortPluginsAndRespectDependenciesOnlyCorePlugins() { $pluginList = $this->makePluginList(); $sorted = $pluginList->sortPluginsAndRespectDependencies(array('UsersManager', 'CoreHome')); $this->assertSame(array('CoreHome','UsersManager'), $sorted); } private function makePluginList() { $globalSettingsProvider = StaticContainer::get('Piwik\Application\Kernel\GlobalSettingsProvider'); $section = $globalSettingsProvider->getSection('Plugins'); // $section['Plugins'] = $pluginsToLoad; $globalSettingsProvider->setSection('Plugins', $section); return new PluginList($globalSettingsProvider); } }