1*f8369d7dSTobias Sarnowski<?php 2*f8369d7dSTobias Sarnowski/** 3*f8369d7dSTobias Sarnowski * Helper class to provide basic functionality for tests 4*f8369d7dSTobias Sarnowski */ 5*f8369d7dSTobias Sarnowskiabstract class DokuWikiTest extends PHPUnit_Framework_TestCase { 6*f8369d7dSTobias Sarnowski 7*f8369d7dSTobias Sarnowski /** 8*f8369d7dSTobias Sarnowski * tests can override this 9*f8369d7dSTobias Sarnowski * 10*f8369d7dSTobias Sarnowski * @var array plugins to enable for test class 11*f8369d7dSTobias Sarnowski */ 12*f8369d7dSTobias Sarnowski protected $pluginsEnabled = array(); 13*f8369d7dSTobias Sarnowski 14*f8369d7dSTobias Sarnowski /** 15*f8369d7dSTobias Sarnowski * tests can override this 16*f8369d7dSTobias Sarnowski * 17*f8369d7dSTobias Sarnowski * @var array plugins to disable for test class 18*f8369d7dSTobias Sarnowski */ 19*f8369d7dSTobias Sarnowski protected $pluginsDisabled = array(); 20*f8369d7dSTobias Sarnowski 21*f8369d7dSTobias Sarnowski /** 22*f8369d7dSTobias Sarnowski * Reset the DokuWiki environment before each test run. Makes sure loaded config, 23*f8369d7dSTobias Sarnowski * language and plugins are correct. 24*f8369d7dSTobias Sarnowski * 25*f8369d7dSTobias Sarnowski * @throws Exception if plugin actions fail 26*f8369d7dSTobias Sarnowski * @return void 27*f8369d7dSTobias Sarnowski */ 28*f8369d7dSTobias Sarnowski public function setUp() { 29*f8369d7dSTobias Sarnowski // reload config 30*f8369d7dSTobias Sarnowski global $conf, $config_cascade; 31*f8369d7dSTobias Sarnowski $conf = array(); 32*f8369d7dSTobias Sarnowski foreach (array('default','local','protected') as $config_group) { 33*f8369d7dSTobias Sarnowski if (empty($config_cascade['main'][$config_group])) continue; 34*f8369d7dSTobias Sarnowski foreach ($config_cascade['main'][$config_group] as $config_file) { 35*f8369d7dSTobias Sarnowski if (@file_exists($config_file)) { 36*f8369d7dSTobias Sarnowski include($config_file); 37*f8369d7dSTobias Sarnowski } 38*f8369d7dSTobias Sarnowski } 39*f8369d7dSTobias Sarnowski } 40*f8369d7dSTobias Sarnowski 41*f8369d7dSTobias Sarnowski // reload license config 42*f8369d7dSTobias Sarnowski global $license; 43*f8369d7dSTobias Sarnowski $license = array(); 44*f8369d7dSTobias Sarnowski 45*f8369d7dSTobias Sarnowski // load the license file(s) 46*f8369d7dSTobias Sarnowski foreach (array('default','local') as $config_group) { 47*f8369d7dSTobias Sarnowski if (empty($config_cascade['license'][$config_group])) continue; 48*f8369d7dSTobias Sarnowski foreach ($config_cascade['license'][$config_group] as $config_file) { 49*f8369d7dSTobias Sarnowski if(@file_exists($config_file)){ 50*f8369d7dSTobias Sarnowski include($config_file); 51*f8369d7dSTobias Sarnowski } 52*f8369d7dSTobias Sarnowski } 53*f8369d7dSTobias Sarnowski } 54*f8369d7dSTobias Sarnowski 55*f8369d7dSTobias Sarnowski // make real paths and check them 56*f8369d7dSTobias Sarnowski init_paths(); 57*f8369d7dSTobias Sarnowski init_files(); 58*f8369d7dSTobias Sarnowski 59*f8369d7dSTobias Sarnowski // reset loaded plugins 60*f8369d7dSTobias Sarnowski global $plugin_controller_class, $plugin_controller; 61*f8369d7dSTobias Sarnowski $plugin_controller = new $plugin_controller_class(); 62*f8369d7dSTobias Sarnowski 63*f8369d7dSTobias Sarnowski // disable all non-default plugins 64*f8369d7dSTobias Sarnowski global $default_plugins; 65*f8369d7dSTobias Sarnowski foreach ($plugin_controller->getList() as $plugin) { 66*f8369d7dSTobias Sarnowski if (!in_array($plugin, $default_plugins)) { 67*f8369d7dSTobias Sarnowski if (!$plugin_controller->disable($plugin)) { 68*f8369d7dSTobias Sarnowski throw new Exception('Could not disable plugin "'.$plugin.'"!'); 69*f8369d7dSTobias Sarnowski } 70*f8369d7dSTobias Sarnowski } 71*f8369d7dSTobias Sarnowski } 72*f8369d7dSTobias Sarnowski 73*f8369d7dSTobias Sarnowski // disable and enable configured plugins 74*f8369d7dSTobias Sarnowski foreach ($this->pluginsDisabled as $plugin) { 75*f8369d7dSTobias Sarnowski if (!$plugin_controller->disable($plugin)) { 76*f8369d7dSTobias Sarnowski throw new Exception('Could not disable plugin "'.$plugin.'"!'); 77*f8369d7dSTobias Sarnowski } 78*f8369d7dSTobias Sarnowski } 79*f8369d7dSTobias Sarnowski foreach ($this->pluginsEnabled as $plugin) { 80*f8369d7dSTobias Sarnowski /* enable() returns false but works... 81*f8369d7dSTobias Sarnowski if (!$plugin_controller->enable($plugin)) { 82*f8369d7dSTobias Sarnowski throw new Exception('Could not enable plugin "'.$plugin.'"!'); 83*f8369d7dSTobias Sarnowski } 84*f8369d7dSTobias Sarnowski */ 85*f8369d7dSTobias Sarnowski $plugin_controller->enable($plugin); 86*f8369d7dSTobias Sarnowski } 87*f8369d7dSTobias Sarnowski 88*f8369d7dSTobias Sarnowski // reset event handler 89*f8369d7dSTobias Sarnowski global $EVENT_HANDLER; 90*f8369d7dSTobias Sarnowski $EVENT_HANDLER = new Doku_Event_Handler(); 91*f8369d7dSTobias Sarnowski 92*f8369d7dSTobias Sarnowski // reload language 93*f8369d7dSTobias Sarnowski $local = $conf['lang']; 94*f8369d7dSTobias Sarnowski trigger_event('INIT_LANG_LOAD', $local, 'init_lang', true); 95*f8369d7dSTobias Sarnowski } 96*f8369d7dSTobias Sarnowski} 97