xref: /dokuwiki/_test/core/TestRequest.php (revision 9cf8b6e0e4b94473739d2b36a906a848b9410f7f)
1<?php
2/**
3 * Simulates a full DokuWiki HTTP Request and allows
4 * runtime inspection.
5 */
6
7// output buffering
8$output_buffer = '';
9
10function ob_start_callback($buffer) {
11    global $output_buffer;
12    $output_buffer .= $buffer;
13}
14
15
16/**
17 * Helper class to execute a fake request
18 */
19class TestRequest {
20
21    private $server = array();
22    private $session = array();
23    private $get = array();
24    private $post = array();
25
26    public function getServer($key) { return $this->server[$key]; }
27    public function getSession($key) { return $this->session[$key]; }
28    public function getGet($key) { return $this->get[$key]; }
29    public function getPost($key) { return $this->post[$key]; }
30
31    public function setServer($key, $value) { $this->server[$key] = $value; }
32    public function setSession($key, $value) { $this->session[$key] = $value; }
33    public function setGet($key, $value) { $this->get[$key] = $value; }
34    public function setPost($key, $value) { $this->post[$key] = $value; }
35
36    /**
37     * Executes the request
38     *
39     * @return TestResponse the resulting output of the request
40     */
41    public function execute() {
42        // save old environment
43        $server = $_SERVER;
44        $session = $_SESSION;
45        $get = $_GET;
46        $post = $_POST;
47        $request = $_REQUEST;
48
49        // fake environment
50        global $default_server_vars;
51        $_SERVER = array_merge($default_server_vars, $this->server);
52        $_SESSION = $this->session;
53        $_GET = $this->get;
54        $_POST = $this->post;
55        $_REQUEST = array_merge($_GET, $_POST);
56
57        // reset output buffer
58        global $output_buffer;
59        $output_buffer = '';
60
61        // now execute dokuwiki and grep the output
62        header_remove();
63        ob_start('ob_start_callback');
64        include(DOKU_INC.'doku.php');
65        ob_end_flush();
66
67        // create the response object
68        $response = new TestResponse(
69            $output_buffer,
70            headers_list()
71        );
72
73        // reset environment
74        $_SERVER = $server;
75        $_SESSION = $session;
76        $_GET = $get;
77        $_POST = $post;
78        $_REQUEST = $request;
79
80        return $response;
81    }
82}
83