xref: /dokuwiki/_test/core/DokuWikiTest.php (revision f8369d7d6e37248d6523fdac6e1d760fca4f1b52)
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