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 // make globals available as were in a function context here FIXME: any others needed? 62 global $INPUT; 63 64 // now execute dokuwiki and grep the output 65 header_remove(); 66 ob_start('ob_start_callback'); 67 include(DOKU_INC.'doku.php'); 68 ob_end_flush(); 69 70 // create the response object 71 $response = new TestResponse( 72 $output_buffer, 73 headers_list() 74 ); 75 76 // reset environment 77 $_SERVER = $server; 78 $_SESSION = $session; 79 $_GET = $get; 80 $_POST = $post; 81 $_REQUEST = $request; 82 83 return $response; 84 } 85} 86