xref: /dokuwiki/_test/bootstrap.php (revision 4e2ac2e47ffdfffadfa5674d55f6f96c5e1cae77)
1f8369d7dSTobias Sarnowski<?php
2f8369d7dSTobias Sarnowski/**
3f8369d7dSTobias Sarnowski * Test Suite bootstrapping for DokuWiki
4f8369d7dSTobias Sarnowski */
5f8369d7dSTobias Sarnowski
6f8369d7dSTobias Sarnowskiif(!defined('DOKU_UNITTEST')) define('DOKU_UNITTEST',dirname(__FILE__).'/');
7f8369d7dSTobias Sarnowskirequire_once DOKU_UNITTEST.'core/phpQuery-onefile.php';
8f8369d7dSTobias Sarnowskirequire_once DOKU_UNITTEST.'core/DokuWikiTest.php';
9f8369d7dSTobias Sarnowskirequire_once DOKU_UNITTEST.'core/TestResponse.php';
10f8369d7dSTobias Sarnowskirequire_once DOKU_UNITTEST.'core/TestRequest.php';
11f8369d7dSTobias Sarnowskirequire_once DOKU_UNITTEST.'core/TestUtils.php';
12f8369d7dSTobias Sarnowski
13f8369d7dSTobias Sarnowski
14f8369d7dSTobias Sarnowski// backward compatibility to old test suite
15f8369d7dSTobias Sarnowskidefine('SIMPLE_TEST', true);
16f8369d7dSTobias Sarnowski
17f8369d7dSTobias Sarnowski// basic behaviours
18f8369d7dSTobias Sarnowskierror_reporting(E_ALL);
19f8369d7dSTobias Sarnowskiset_time_limit(0);
20f8369d7dSTobias Sarnowskiini_set('memory_limit','2048M');
21f8369d7dSTobias Sarnowski
22f8369d7dSTobias Sarnowski// prepare temporary directories
23f8369d7dSTobias Sarnowskidefine('DOKU_INC', dirname(dirname(__FILE__)).'/');
24f8369d7dSTobias Sarnowskidefine('TMP_DIR', sys_get_temp_dir().'/dwtests-'.microtime(true));
25f8369d7dSTobias Sarnowskidefine('DOKU_CONF', TMP_DIR.'/conf/');
26f8369d7dSTobias Sarnowskidefine('DOKU_TMP_DATA', TMP_DIR.'/data/');
27f8369d7dSTobias Sarnowski
28f8369d7dSTobias Sarnowski// default plugins
29f8369d7dSTobias Sarnowski$default_plugins = array(
307840324dSAndreas Gohr    'authplain',
31f8369d7dSTobias Sarnowski    'acl',
32f8369d7dSTobias Sarnowski    'config',
33f8369d7dSTobias Sarnowski    'info',
34f8369d7dSTobias Sarnowski    'plugin',
35f8369d7dSTobias Sarnowski    'popularity',
36f8369d7dSTobias Sarnowski    'revert',
37f8369d7dSTobias Sarnowski    'safefnrecode',
38f8369d7dSTobias Sarnowski    'usermanager'
39f8369d7dSTobias Sarnowski);
40f8369d7dSTobias Sarnowski
41f8369d7dSTobias Sarnowski// default server variables
42f8369d7dSTobias Sarnowski$default_server_vars = array(
43f8369d7dSTobias Sarnowski    'QUERY_STRING' => '?id=',
44f8369d7dSTobias Sarnowski    'REQUEST_METHOD' => 'GET',
45f8369d7dSTobias Sarnowski    'CONTENT_TYPE' => '',
46f8369d7dSTobias Sarnowski    'CONTENT_LENGTH' => '',
47f8369d7dSTobias Sarnowski    'SCRIPT_NAME' => '/doku.php',
48f8369d7dSTobias Sarnowski    'REQUEST_URI' => '/doku.php?id=',
49f8369d7dSTobias Sarnowski    'DOCUMENT_URI' => '/doku.php',
50f8369d7dSTobias Sarnowski    'DOCUMENT_ROOT' => DOKU_INC,
51f8369d7dSTobias Sarnowski    'SERVER_PROTOCOL' => 'HTTP/1.1',
52f8369d7dSTobias Sarnowski    'SERVER_SOFTWARE' => 'nginx/0.7.67',
53f8369d7dSTobias Sarnowski    'REMOTE_ADDR' => '87.142.120.6',
54f8369d7dSTobias Sarnowski    'REMOTE_PORT' => '21418',
55f8369d7dSTobias Sarnowski    'SERVER_ADDR' => '46.38.241.24',
56f8369d7dSTobias Sarnowski    'SERVER_PORT' => '443',
57f8369d7dSTobias Sarnowski    'SERVER_NAME' => 'wiki.example.com',
58f8369d7dSTobias Sarnowski    'REDIRECT_STATUS' => '200',
59f8369d7dSTobias Sarnowski    'SCRIPT_FILENAME' => DOKU_INC.'doku.php',
60f8369d7dSTobias Sarnowski    'HTTP_HOST' => 'wiki.example.com',
61f8369d7dSTobias Sarnowski    'HTTP_USER_AGENT' => 'Mozilla/5.0 (X11; OpenBSD amd64; rv:11.0) Gecko/20100101 Firefox/11.0',
62f8369d7dSTobias Sarnowski    'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
63f8369d7dSTobias Sarnowski    'HTTP_ACCEPT_LANGUAGE' => 'en-us,en;q=0.5',
64f8369d7dSTobias Sarnowski    'HTTP_ACCEPT_ENCODING' => 'gzip, deflate',
65f8369d7dSTobias Sarnowski    'HTTP_CONNECTION' => 'keep-alive',
66f8369d7dSTobias Sarnowski    'HTTP_CACHE_CONTROL' => 'max-age=0',
67f8369d7dSTobias Sarnowski    'PHP_SELF' => '/doku.php',
68f8369d7dSTobias Sarnowski    'REQUEST_TIME' => time(),
69f8369d7dSTobias Sarnowski);
70f8369d7dSTobias Sarnowski
71*4e2ac2e4SChristopher Smith// fixup for $_SERVER when run from CLI,
72*4e2ac2e4SChristopher Smith// some values should be mocked for use by inc/init.php which is called here
73*4e2ac2e4SChristopher Smith// [ $_SERVER is also mocked in TestRequest::execute() ]
74*4e2ac2e4SChristopher Smithif (php_sapi_name() == 'cli') {
75*4e2ac2e4SChristopher Smith  $_SERVER = array_merge($default_server_vars, $_SERVER);
76*4e2ac2e4SChristopher Smith}
77*4e2ac2e4SChristopher Smith
78f8369d7dSTobias Sarnowski// create temp directories
79f8369d7dSTobias Sarnowskimkdir(TMP_DIR);
80f8369d7dSTobias Sarnowski
81f8369d7dSTobias Sarnowski// cleanup dir after exit
829c6354e5STobias Sarnowskiif (getenv('PRESERVE_TMP') != 'true') {
83f8369d7dSTobias Sarnowski    register_shutdown_function(function() {
84f8369d7dSTobias Sarnowski        TestUtils::rdelete(TMP_DIR);
85f8369d7dSTobias Sarnowski    });
869c6354e5STobias Sarnowski} else {
879c6354e5STobias Sarnowski    echo ">>>> Preserving temporary directory: ".TMP_DIR."\n";
889c6354e5STobias Sarnowski}
89f8369d7dSTobias Sarnowski
90f8369d7dSTobias Sarnowski// populate default dirs
919c6354e5STobias SarnowskiTestUtils::rcopy(TMP_DIR, DOKU_INC.'/conf');
92f8369d7dSTobias SarnowskiTestUtils::rcopy(TMP_DIR, dirname(__FILE__).'/conf');
930644090aSAndreas Gohrmkdir(DOKU_TMP_DATA);
940644090aSAndreas Gohrforeach(array(
950644090aSAndreas Gohr    'attic', 'cache', 'index', 'locks', 'media',
960644090aSAndreas Gohr    'media_attic', 'media_meta', 'meta', 'pages', 'tmp') as $dir){
970644090aSAndreas Gohr    mkdir(DOKU_TMP_DATA.'/'.$dir);
980644090aSAndreas Gohr}
99f8369d7dSTobias Sarnowski
100f8369d7dSTobias Sarnowski// disable all non-default plugins by default
101f8369d7dSTobias Sarnowski$dh = dir(DOKU_INC.'lib/plugins/');
102f8369d7dSTobias Sarnowskiwhile (false !== ($entry = $dh->read())) {
103f8369d7dSTobias Sarnowski    if ($entry == '.' || $entry == '..') {
104f8369d7dSTobias Sarnowski        continue;
105f8369d7dSTobias Sarnowski    }
106f8369d7dSTobias Sarnowski
107f8369d7dSTobias Sarnowski    if (!is_dir(DOKU_INC.'lib/plugins/'.$entry)) {
108f8369d7dSTobias Sarnowski        continue;
109f8369d7dSTobias Sarnowski    }
110f8369d7dSTobias Sarnowski
111f8369d7dSTobias Sarnowski    if (!in_array($entry, $default_plugins)) {
112f8369d7dSTobias Sarnowski        // disable this plugin
113f8369d7dSTobias Sarnowski        TestUtils::fappend(DOKU_CONF.'plugins.local.php', "\$plugins['$entry'] = 0;\n");
114f8369d7dSTobias Sarnowski    }
115f8369d7dSTobias Sarnowski}
116f8369d7dSTobias Sarnowski$dh->close();
117f8369d7dSTobias Sarnowski
118f8369d7dSTobias Sarnowski// load dw
119f8369d7dSTobias Sarnowskirequire_once(DOKU_INC.'inc/init.php');
120f8369d7dSTobias Sarnowski
1210c313f78SMichael Hamann// load the parser so $PARSER_MODES is defined before the tests start
1220c313f78SMichael Hamann// otherwise PHPUnit unsets $PARSER_MODES in some cases which breaks p_get_parsermodes()
1230c313f78SMichael Hamannrequire_once(DOKU_INC.'inc/parser/parser.php');
1240c313f78SMichael Hamann
125