Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

<?php
/**
 * CakePluginTest file.
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       Cake.Test.Case.Core
 * @since         CakePHP(tm) v 2.0
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */

App::uses('CakePlugin', 'Core');

/**
 * CakePluginTest class
 *
 */
class CakePluginTest extends CakeTestCase {

/**
 * Sets the plugins folder for this test
 *
 * @return void
 */
        public function setUp() {
                parent::setUp();
                App::build(array(
                        'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
                ), App::RESET);
                App::objects('plugins', null, false);
        }

/**
 * Reverts the changes done to the environment while testing
 *
 * @return void
 */
        public function tearDown() {
                parent::tearDown();
                CakePlugin::unload();
        }

/**
 * Tests loading a single plugin
 *
 * @return void
 */
        public function testLoadSingle() {
                CakePlugin::unload();
                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));
                $this->assertTrue(CakePlugin::loaded('TestPlugin'));
                $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));
                $this->assertTrue(CakePlugin::loaded('TestPlugin'));
                $this->assertEquals('loaded plugin bootstrap', Configure::read('CakePluginTest.test_plugin.bootstrap'));

                CakePlugin::routes();
                $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')));
                $this->assertTrue(CakePlugin::loaded('TestPlugin'));
                $this->assertEquals('loaded plugin bootstrap', Configure::read('CakePluginTest.test_plugin.bootstrap'));
        }

/**
 * Tests that it is possible to load plugin bootstrap by calling a callback function
 *
 * @return void
 */
        public function testCallbackBootstrap() {
                CakePlugin::load('TestPlugin', array('bootstrap' => array($this, 'pluginBootstrap')));
                $this->assertTrue(CakePlugin::loaded('TestPlugin'));
                $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));
                CakePlugin::routes();
        }

/**
 * Test ignoring missing bootstrap/routes file
 *
 * @return void
 */
        public function testIgnoreMissingFiles() {
                CakePlugin::loadAll(array(array(
                        'bootstrap' => true,
                        'routes' => true,
                        'ignoreMissing' => true
                )));
                CakePlugin::routes();
        }

/**
 * Tests that CakePlugin::load() throws an exception on unknown plugin
 *
 * @return void
 * @expectedException MissingPluginException
 */
        public function testLoadNotFound() {
                CakePlugin::load('MissingPlugin');
        }

/**
 * Tests that CakePlugin::path() returns the correct path for the loaded plugins
 *
 * @return void
 */
        public function testPath() {
                CakePlugin::load(array('TestPlugin', 'TestPluginTwo'));
                $expected = CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS . 'TestPlugin' . DS;
                $this->assertEquals(CakePlugin::path('TestPlugin'), $expected);

                $expected = CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS . 'TestPluginTwo' . DS;
                $this->assertEquals(CakePlugin::path('TestPluginTwo'), $expected);
        }

/**
 * Tests that CakePlugin::path() throws an exception on unknown plugin
 *
 * @return void
 * @expectedException MissingPluginException
 */
        public function testPathNotFound() {
                CakePlugin::path('TestPlugin');
        }

/**
 * Tests that CakePlugin::loadAll() will load all plugins in the configured folder
 *
 * @return void
 */
        public function testLoadAll() {
                CakePlugin::loadAll();
                $expected = array('PluginJs', 'TestPlugin', 'TestPluginTwo');
                $this->assertEquals($expected, CakePlugin::loaded());
        }

/**
 * Tests that CakePlugin::loadAll() will load all plugins in the configured folder with bootstrap loading
 *
 * @return void
 */
        public function testLoadAllWithDefaults() {
                $defaults = array('bootstrap' => true);
                CakePlugin::loadAll(array($defaults));
                $expected = array('PluginJs', 'TestPlugin', 'TestPluginTwo');
                $this->assertEquals($expected, CakePlugin::loaded());
                $this->assertEquals('loaded js plugin bootstrap', Configure::read('CakePluginTest.js_plugin.bootstrap'));
                $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 that CakePlugin::loadAll() will load all plugins in the configured folder wit defaults
 * and overrides for a plugin
 *
 * @return void
 */
        public function testLoadAllWithDefaultsAndOverride() {
                CakePlugin::loadAll(array(array('bootstrap' => true), 'TestPlugin' => array('routes' => true)));
                CakePlugin::routes();

                $expected = array('PluginJs', 'TestPlugin', 'TestPluginTwo');
                $this->assertEquals($expected, CakePlugin::loaded());
                $this->assertEquals('loaded js plugin bootstrap', Configure::read('CakePluginTest.js_plugin.bootstrap'));
                $this->assertEquals('loaded plugin routes', Configure::read('CakePluginTest.test_plugin.routes'));
                $this->assertEquals(null, Configure::read('CakePluginTest.test_plugin.bootstrap'));
                $this->assertEquals('loaded plugin two bootstrap', Configure::read('CakePluginTest.test_plugin_two.bootstrap'));
        }

/**
 * Auxiliary function to test plugin bootstrap callbacks
 *
 * @return void
 */
        public function pluginBootstrap() {
                Configure::write('CakePluginTest.test_plugin.bootstrap', 'called plugin bootstrap callback');
        }
}