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