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