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