| [ Index ] |
PHP Cross Reference of Akelos Framework |
[Summary view] [Print] [Text view]
1 <?php 2 require_once (AK_LIB_DIR.DS.'AkUnitTest.php'); 3 4 class AkTestApplication extends AkUnitTest 5 { 6 var $Dispatcher; 7 var $_response; 8 var $_cacheHeaders = array(); 9 10 function assertWantedText($text, $message = '%s') 11 { 12 $this->assertWantedPattern('/'.preg_quote($text).'/', $message); 13 } 14 15 /** 16 * Asserts only if the whole response matches $text 17 */ 18 function assertTextMatch($text, $message = '%s') 19 { 20 $this->assertWantedPattern('|^'.$text.'$|', $message); 21 } 22 23 function assertText($text, $message = '%s') { 24 return $this->assert( 25 new TextExpectation($text), 26 strip_tags($this->_response), 27 $message); 28 } 29 function assertNoText($text, $message = '%s') { 30 return $this->assert( 31 new NoTextExpectation($text), 32 strip_tags($this->_response), 33 $message); 34 } 35 function assertHeader($header, $content = null) 36 { 37 if (is_array($this->_cacheHeaders)) { 38 foreach ($this->_cacheHeaders as $ch) { 39 $parts = split(': ', $ch); 40 if ($parts[0] == $header) { 41 if ($content != null) { 42 $this->assertEqual($content, $parts[1],'1 Header content does not match: '.$parts[1].'!='.$content.':'.var_export($this->_cacheHeaders,true)."\n".var_export($this->Dispatcher->Request->_format,true)); 43 return; 44 } else { 45 $this->assertTrue(true); 46 return; 47 } 48 } 49 } 50 } 51 if ($this->Dispatcher) { 52 $value = $this->Dispatcher->Response->getHeader($header); 53 $this->assertTrue($value!=false,'Header "'.$header.'" not found'); 54 if ($content != null) { 55 $this->assertEqual($value, $content,'2 Header content does not match: '.$content.'!='.$value.':'.var_export($this->Dispatcher->Response->_headers,true).':'.var_export($this->Dispatcher->Response->_headers_sent,true)."\n".var_export($this->Dispatcher->Request->_format,true));; 56 } 57 } else { 58 $this->assertTrue(false,'Header "'.$header.'" not found'); 59 } 60 } 61 62 function _testXPath($xpath_expression) 63 { 64 if (!class_exists('DOMDocument') || !class_exists('DOMXPath')) { 65 if (function_exists('domxml_open_mem')) { 66 $dom = domxml_open_mem($this->_response); 67 if (!$dom) { 68 $this->fail('Error parsing doc'); 69 return false; 70 } 71 var_dump($dom); 72 $xpath = $dom->xpath_init(); 73 var_dump($xpath); 74 $ctx = $dom->xpath_new_context(); 75 var_dump($xpath_expression); 76 $result = $ctx->xpath_eval($xpath_expression); 77 var_dump($result); 78 $return = new stdClass(); 79 $return->length = count($result->nodeset); 80 return $return; 81 } 82 $this->fail('No xpath support built in'); 83 return false; 84 } else if (extension_loaded('domxml')) { 85 $this->fail('Please disable the domxml extension. Only php5 builtin domxml is supported'); 86 return false; 87 } 88 89 $dom = new DOMDocument(); 90 $response = preg_replace('/(<!DOCTYPE.*?>)/is','',$this->_response); 91 92 $dom->loadHtml($response); 93 $xpath = new DOMXPath($dom); 94 $node = $xpath->query($xpath_expression); 95 return $node; 96 } 97 98 function assertXPath($xpath_expression, $message = null) 99 { 100 $node = $this->_testXPath($xpath_expression); 101 if ($node->length<1) { 102 $message = empty($message)?'Element not found using xpath: %xpath':$message; 103 $message = str_replace('%xpath',$xpath_expression,$message); 104 $this->fail($message); 105 } else { 106 $message = empty($message)?'Element found using xpath: %xpath':$message; 107 $this->pass($message); 108 } 109 return $node; 110 } 111 function assertNoXPath($xpath_expression, $message = null) 112 { 113 $node = $this->_testXPath($xpath_expression); 114 if ($node->length>0) { 115 $message = empty($message)?'Element found using xpath: %xpath':$message; 116 $message = str_replace('%xpath',$xpath_expression,$message); 117 $this->fail($message); 118 } else { 119 $message = empty($message)?'Element not found using xpath: %xpath':$message; 120 $this->pass($message); 121 } 122 } 123 function assertValidXhtml($message = null) 124 { 125 require_once (AK_LIB_DIR.DS.'AkXhtmlValidator.php'); 126 $response = $this->_response; 127 $validator = new AkXhtmlValidator(); 128 $valid = $validator->validate($response); 129 130 if (!$valid) { 131 $message = empty($message)?'Non valid Xhtml: %errors':$message; 132 $message = str_replace('%errors',strip_tags(join("\n- ",$validator->getErrors())),$message); 133 $this->fail($message); 134 } else { 135 $message = empty($message)?'XHtml valid':$message; 136 $this->pass($message); 137 } 138 } 139 140 function &getController() 141 { 142 if (isset($this->Dispatcher)) { 143 $controller = &$this->Dispatcher->Controller; 144 return $controller; 145 } else { 146 $false = false; 147 return $false; 148 } 149 } 150 function _setConstants($constants = array()) 151 { 152 foreach ($constants as $constant=>$value) { 153 !defined($constant)?define($constant,$value):null; 154 } 155 } 156 function setIp($ip) 157 { 158 $_SERVER['HTTP_CLIENT_IP'] = $ip; 159 $_SERVER['REMOTE_ADDR'] = $ip; 160 } 161 162 function assertResponse($code) 163 { 164 $this->assertHeader('Status',$code); 165 } 166 167 function setForwaredForIp($ip) 168 { 169 $_SERVER['HTTP_X_FORWARDED_FOR'] = $ip; 170 } 171 function addIfModifiedSince($gmtDateString) 172 { 173 $_SERVER['HTTP_IF_MODIFIED_SINCE'] = $gmtDateString; 174 } 175 function setXmlHttpRequest() 176 { 177 $_SERVER['HTTP_X_REQUESTED_WITH']='xmlhttprequest'; 178 } 179 function setAcceptEncoding($encoding) 180 { 181 $_SERVER['HTTP_ACCEPT_ENCODING']=$encoding; 182 } 183 function &getHeader($name) 184 { 185 if ($this->Dispatcher) { 186 $sentHeader = $this->Dispatcher->Response->getHeader($name); 187 } else { 188 $sentHeader=false; 189 } 190 if (!$sentHeader) { 191 if (is_array($this->_cacheHeaders)) { 192 foreach ($this->_cacheHeaders as $ch) { 193 $parts = split(': ', $ch); 194 if ($parts[0] == $name) { 195 $return=@$parts[1]; 196 return $return; 197 } 198 } 199 } 200 } 201 return $sentHeader; 202 } 203 204 function _reset() 205 { 206 $_REQUEST = array(); 207 $_POST = array(); 208 $_SESSION = array(); 209 $_GET = array(); 210 $_POST = array(); 211 } 212 213 function _init($url, $constants = array(), $controllerVars = array()) 214 { 215 $this->_reset(); 216 $this->_response = null; 217 $this->_cacheHeaders = array(); 218 $this->_setConstants($constants); 219 $parts = parse_url($url); 220 $_REQUEST['ak'] = isset($parts['path'])?$parts['path']:'/'; 221 $_SERVER['AK_HOST']= isset($parts['host'])?$parts['host']:'localhost'; 222 $cache_settings = Ak::getSettings('caching', false); 223 if ($cache_settings['enabled']) { 224 225 require_once (AK_LIB_DIR . DS . 'AkActionController'.DS.'AkCacheHandler.php'); 226 $null = null; 227 $pageCache = &Ak::singleton('AkCacheHandler',$null); 228 229 $pageCache->init($null, $cache_settings); 230 if ($cachedPage = $pageCache->getCachedPage()) { 231 static $_cachedHeaders = array(); 232 ob_start(); 233 global $sendHeaders, $returnHeaders, $exit; 234 $sendHeaders = false; 235 $returnHeaders = true; 236 $exit = false; 237 $headers = include $cachedPage; 238 //$headers = $cachedPage->render(false,false,true); 239 $this->_response = ob_get_clean(); 240 if (is_array($headers)) { 241 $this->_cacheHeaders = $headers; 242 } 243 return true; 244 } 245 } 246 require_once (AK_LIB_DIR.DS.'AkUnitTest'.DS.'AkTestDispatcher.php'); 247 $this->Dispatcher =& new AkTestDispatcher($controllerVars); 248 } 249 250 251 function get($url,$constants = array(), $controllerVars = array()) 252 { 253 $_SERVER['REQUEST_METHOD'] = 'GET'; 254 ob_start(); 255 $rendered = $this->_init($url, $constants, $controllerVars); 256 if (!$rendered) { 257 $res = $this->Dispatcher->get($url); 258 $this->_response = ob_get_clean(); 259 } else { 260 $res=true; 261 } 262 $this->_cleanUp(); 263 return $res; 264 } 265 function _cleanUp() 266 { 267 unset($_SERVER['HTTP_IF_MODIFIED_SINCE']); 268 unset($_SERVER['HTTP_X_REQUESTED_WITH']); 269 unset($_SERVER['HTTP_ACCEPT_ENCODING']); 270 } 271 function post($url, $data = null, $constants = array(), $controllerVars = array()) 272 { 273 $_SERVER['REQUEST_METHOD'] = 'POST'; 274 ob_start(); 275 276 $rendered = $this->_init($url, $constants, $controllerVars); 277 if (!$rendered) { 278 $res = $this->Dispatcher->post($url, $data); 279 $this->_response = ob_get_clean(); 280 } else { 281 $res=true; 282 } 283 return $res; 284 } 285 286 function put($url,$data = null, $constants = array(), $controllerVars = array()) 287 { 288 $_SERVER['REQUEST_METHOD'] = 'PUT'; 289 ob_start(); 290 $rendered = $this->_init($url, $constants, $controllerVars); 291 if (!$rendered) { 292 $res = $this->Dispatcher->put($url,$data); 293 $this->_response = ob_get_clean(); 294 } else { 295 $res = true; 296 } 297 return $res; 298 } 299 function assertWantedPattern($pattern, $message = '%s') { 300 return $this->assertPattern($pattern, $message); 301 } 302 function assertPattern($pattern, $message = '%s') { 303 return $this->assert( 304 new PatternExpectation($pattern), 305 $this->_response, 306 $message); 307 } 308 function delete($url, $constants = array(), $controllerVars = array()) 309 { 310 $_SERVER['REQUEST_METHOD'] = 'DELETE'; 311 ob_start(); 312 $rendered = $this->_init($url, $constants, $controllerVars); 313 if (!$rendered) { 314 $res = $this->Dispatcher->delete($url); 315 $this->_response = ob_get_clean(); 316 } else { 317 $res= true; 318 } 319 return $res; 320 } 321 322 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Mon Oct 27 12:43:49 2008 | Cross-referenced by PHPXref 0.6 |