mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Fixing some errors in the new plugin loader and adding some tests
This commit is contained in:
parent
8053436b35
commit
4f1a6baf87
6 changed files with 183 additions and 13 deletions
|
@ -45,13 +45,13 @@ class CakePlugin {
|
|||
if (is_array($plugin)) {
|
||||
foreach ($plugin as $name => $conf) {
|
||||
list($name, $conf) = (is_numeric($name)) ? array($conf, $config) : array($name, $conf);
|
||||
self::load($name, $config);
|
||||
self::load($name, $conf);
|
||||
}
|
||||
return;
|
||||
}
|
||||
$config += array('bootstrap' => false, 'routes' => false);
|
||||
$underscored = Inflector::underscore($plugin);
|
||||
if (empty($config[$path])) {
|
||||
if (empty($config['path'])) {
|
||||
foreach (App::path('plugins') as $path) {
|
||||
if (is_dir($path . $underscored)) {
|
||||
self::$_plugins[$plugin] = $config + array('path' => $path . $underscored . DS);
|
||||
|
@ -104,15 +104,13 @@ class CakePlugin {
|
|||
}
|
||||
|
||||
$path = self::path($plugin);
|
||||
if ($config['bootstrap'] === true && is_file($path . 'config' . DS . 'bootstrap.php')) {
|
||||
if ($config['bootstrap'] === true) {
|
||||
return include($path . 'config' . DS . 'bootstrap.php');
|
||||
}
|
||||
|
||||
$bootstrap = (array)$config['bootstrap'];
|
||||
foreach ($bootstrap as $file) {
|
||||
if (is_file($path . 'config' . DS . $file . '.php')) {
|
||||
include $path . 'config' . DS . $file . '.php';
|
||||
}
|
||||
include $path . 'config' . DS . $file . '.php';
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -129,11 +127,7 @@ class CakePlugin {
|
|||
if ($config['routes'] === false) {
|
||||
return false;
|
||||
}
|
||||
$path = include self::path($plugin) . 'config' . DS . 'routes.php';
|
||||
if (is_file($path)) {
|
||||
include $path;
|
||||
}
|
||||
return true;
|
||||
return (bool) include self::path($plugin) . 'config' . DS . 'routes.php';
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -141,7 +135,7 @@ class CakePlugin {
|
|||
*
|
||||
* @return array list of plugins that have been loaded
|
||||
*/
|
||||
public static function enabled() {
|
||||
public static function loaded() {
|
||||
return array_keys(self::$_plugins);
|
||||
}
|
||||
|
||||
|
@ -155,7 +149,7 @@ class CakePlugin {
|
|||
if (is_null($plugin)) {
|
||||
self::$_plugins = array();
|
||||
} else {
|
||||
unset($_plugins[$plugin]);
|
||||
unset(self::$_plugins[$plugin]);
|
||||
}
|
||||
}
|
||||
}
|
168
lib/Cake/tests/Case/Core/CakePluginTest.php
Normal file
168
lib/Cake/tests/Case/Core/CakePluginTest.php
Normal file
|
@ -0,0 +1,168 @@
|
|||
<?php
|
||||
|
||||
|
||||
App::uses('CakePlugin', 'Core');
|
||||
|
||||
/**
|
||||
* CakePluginTest class
|
||||
*
|
||||
*/
|
||||
class CakePluginTest extends CakeTestCase {
|
||||
|
||||
/**
|
||||
* Sets the plugins folder for this test
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp() {
|
||||
App::build(array(
|
||||
'plugins' => array(CAKE_TESTS . 'test_app' . DS . 'plugins' . DS)
|
||||
), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverts the changes done to the environment while testing
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function tearDown() {
|
||||
App::build();
|
||||
CakePlugin::unload();
|
||||
Configure::delete('CakePluginTest');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests loading a single plugin
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testLoadSingle() {
|
||||
CakePlugin::load('TestPlugin');
|
||||
$expected = array('TestPlugin');
|
||||
$this->assertEquals($expected, CakePlugin::loaded());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests unloading plugins
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testUnload() {
|
||||
CakePlugin::load('TestPlugin');
|
||||
$expected = array('TestPlugin');
|
||||
$this->assertEquals($expected, CakePlugin::loaded());
|
||||
|
||||
CakePlugin::unload('TestPlugin');
|
||||
$this->assertEquals(array(), CakePlugin::loaded());
|
||||
|
||||
CakePlugin::load('TestPlugin');
|
||||
$expected = array('TestPlugin');
|
||||
$this->assertEquals($expected, CakePlugin::loaded());
|
||||
|
||||
CakePlugin::unload('TestFakePlugin');
|
||||
$this->assertEquals($expected, CakePlugin::loaded());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests loading a plugin and its bootstrap file
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testLoadSingleWithBootstrap() {
|
||||
CakePlugin::load('TestPlugin', array('bootstrap' => true));
|
||||
$expected = array('TestPlugin');
|
||||
$this->assertEquals($expected, CakePlugin::loaded());
|
||||
$this->assertEquals('loaded plugin bootstrap', Configure::read('CakePluginTest.test_plugin.bootstrap'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests loading a plugin with bootstrap file and routes file
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testLoadSingleWithBootstrapAndRoutes() {
|
||||
CakePlugin::load('TestPlugin', array('bootstrap' => true, 'routes' => true));
|
||||
$expected = array('TestPlugin');
|
||||
$this->assertEquals($expected, CakePlugin::loaded());
|
||||
$this->assertEquals('loaded plugin bootstrap', Configure::read('CakePluginTest.test_plugin.bootstrap'));
|
||||
$this->assertEquals('loaded plugin routes', Configure::read('CakePluginTest.test_plugin.routes'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests loading multiple plugins at once
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testLoadMultiple() {
|
||||
CakePlugin::load(array('TestPlugin', 'TestPluginTwo'));
|
||||
$expected = array('TestPlugin', 'TestPluginTwo');
|
||||
$this->assertEquals($expected, CakePlugin::loaded());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests loading multiple plugins and their bootstrap files
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testLoadMultipleWithDefaults() {
|
||||
CakePlugin::load(array('TestPlugin', 'TestPluginTwo'), array('bootstrap' => true, 'routes' => false));
|
||||
$expected = array('TestPlugin', 'TestPluginTwo');
|
||||
$this->assertEquals($expected, CakePlugin::loaded());
|
||||
$this->assertEquals('loaded plugin bootstrap', Configure::read('CakePluginTest.test_plugin.bootstrap'));
|
||||
$this->assertEquals('loaded plugin two bootstrap', Configure::read('CakePluginTest.test_plugin_two.bootstrap'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests loading multiple plugins with default loading params and some overrides
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testLoadMultipleWithDefaultsAndOverride() {
|
||||
CakePlugin::load(
|
||||
array('TestPlugin', 'TestPluginTwo' => array('routes' => false)),
|
||||
array('bootstrap' => true, 'routes' => true)
|
||||
);
|
||||
$expected = array('TestPlugin', 'TestPluginTwo');
|
||||
$this->assertEquals($expected, CakePlugin::loaded());
|
||||
$this->assertEquals('loaded plugin bootstrap', Configure::read('CakePluginTest.test_plugin.bootstrap'));
|
||||
$this->assertEquals(null, Configure::read('CakePluginTest.test_plugin_two.bootstrap'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that it is possible to load multiple bootstrap files at once
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testMultipleBootstrapFiles() {
|
||||
CakePlugin::load('TestPlugin', array('bootstrap' => array('bootstrap', 'custom_config')));
|
||||
$expected = array('TestPlugin');
|
||||
$this->assertEquals($expected, CakePlugin::loaded());
|
||||
$this->assertEquals('loaded plugin bootstrap', Configure::read('CakePluginTest.test_plugin.bootstrap'));
|
||||
}
|
||||
|
||||
public function testCallbackBootstrap() {
|
||||
CakePlugin::load('TestPlugin', array('bootstrap' => array($this, 'pluginBootstrap')));
|
||||
$expected = array('TestPlugin');
|
||||
$this->assertEquals($expected, CakePlugin::loaded());
|
||||
$this->assertEquals('called plugin bootstrap callback', Configure::read('CakePluginTest.test_plugin.bootstrap'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests that loading a missing routes file throws a warning
|
||||
*
|
||||
* @return void
|
||||
* @expectedException PHPUNIT_FRAMEWORK_ERROR_WARNING
|
||||
*/
|
||||
public function testLoadMultipleWithDefaultsMissingFile() {
|
||||
CakePlugin::load(array('TestPlugin', 'TestPluginTwo'), array('bootstrap' => true, 'routes' => true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Auxiliary function to test plugin bootstrap callbacks
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function pluginBootstrap() {
|
||||
Configure::write('CakePluginTest.test_plugin.bootstrap', 'called plugin bootstrap callback');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
<?php
|
||||
Configure::write('CakePluginTest.test_plugin.bootstrap', 'loaded plugin bootstrap');
|
|
@ -0,0 +1,2 @@
|
|||
<?php
|
||||
Configure::write('CakePluginTest.test_plugin.custom', 'loaded plugin custom config');
|
|
@ -0,0 +1,2 @@
|
|||
<?php
|
||||
Configure::write('CakePluginTest.test_plugin.routes', 'loaded plugin routes');
|
|
@ -0,0 +1,2 @@
|
|||
<?php
|
||||
Configure::write('CakePluginTest.test_plugin_two.bootstrap', 'loaded plugin two bootstrap');
|
Loading…
Reference in a new issue