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