[ Index ]

PHP Cross Reference of Akelos Framework

title

Body

[close]

/AkUnitTest/ -> AkTestApplication.php (source)

   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  }


Generated: Mon Oct 27 12:43:49 2008 Cross-referenced by PHPXref 0.6