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