[ Index ]

PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008]

title

Body

[close]

/lib/simpletestlib/ -> web_tester.php (source)

   1  <?php
   2      /**
   3       *    Base include file for SimpleTest.
   4       *    @package    SimpleTest
   5       *    @subpackage    WebTester
   6       *    @version    $Id$
   7       */
   8  
   9      /**#@+
  10       *    include other SimpleTest class files
  11       */
  12      require_once(dirname(__FILE__) . '/test_case.php');
  13      require_once(dirname(__FILE__) . '/browser.php');
  14      require_once(dirname(__FILE__) . '/page.php');
  15      require_once(dirname(__FILE__) . '/expectation.php');
  16      /**#@-*/
  17      
  18      /**
  19       *    Test for an HTML widget value match.
  20       *      @package SimpleTest
  21       *      @subpackage WebTester
  22       */
  23      class FieldExpectation extends SimpleExpectation {
  24          var $_value;
  25          
  26          /**
  27           *    Sets the field value to compare against.
  28           *    @param mixed $value     Test value to match. Can be an
  29           *                            expectation for say pattern matching.
  30           *    @param string $message  Optiona message override. Can use %s as
  31           *                            a placeholder for the original message.
  32           *    @access public
  33           */
  34          function FieldExpectation($value, $message = '%s') {
  35              $this->SimpleExpectation($message);
  36              if (is_array($value)) {
  37                  sort($value);
  38              }
  39              $this->_value = $value;
  40          }
  41          
  42          /**
  43           *    Tests the expectation. True if it matches
  44           *    a string value or an array value in any order.
  45           *    @param mixed $compare        Comparison value. False for
  46           *                                 an unset field.
  47           *    @return boolean              True if correct.
  48           *    @access public
  49           */
  50          function test($compare) {
  51              if ($this->_value === false) {
  52                  return ($compare === false);
  53              }
  54              if ($this->_isSingle($this->_value)) {
  55                  return $this->_testSingle($compare);
  56              }
  57              if (is_array($this->_value)) {
  58                  return $this->_testMultiple($compare);
  59              }
  60              return false;
  61          }
  62          
  63          /**
  64           *    Tests for valid field comparisons with a single option.
  65           *    @param mixed $value       Value to type check.
  66           *    @return boolean           True if integer, string or float.
  67           *    @access private
  68           */
  69          function _isSingle($value) {
  70              return is_string($value) || is_integer($value) || is_float($value);
  71          }
  72          
  73          /**
  74           *    String comparison for simple field with a single option.
  75           *    @param mixed $compare    String to test against.
  76           *    @returns boolean         True if matching.
  77           *    @access private
  78           */
  79          function _testSingle($compare) {
  80              if (is_array($compare) && count($compare) == 1) {
  81                  $compare = $compare[0];
  82              }
  83              if (! $this->_isSingle($compare)) {
  84                  return false;
  85              }
  86              return ($this->_value == $compare);
  87          }
  88          
  89          /**
  90           *    List comparison for multivalue field.
  91           *    @param mixed $compare    List in any order to test against.
  92           *    @returns boolean         True if matching.
  93           *    @access private
  94           */
  95          function _testMultiple($compare) {
  96              if (is_string($compare)) {
  97                  $compare = array($compare);
  98              }
  99              if (! is_array($compare)) {
 100                  return false;
 101              }
 102              sort($compare);
 103              return ($this->_value === $compare);
 104          }
 105          
 106          /**
 107           *    Returns a human readable test message.
 108           *    @param mixed $compare      Comparison value.
 109           *    @return string             Description of success
 110           *                               or failure.
 111           *    @access public
 112           */
 113          function testMessage($compare) {
 114              $dumper = &$this->_getDumper();
 115              if (is_array($compare)) {
 116                  sort($compare);
 117              }
 118              if ($this->test($compare)) {
 119                  return "Field expectation [" . $dumper->describeValue($this->_value) . "]";
 120              } else {
 121                  return "Field expectation [" . $dumper->describeValue($this->_value) .
 122                          "] fails with [" .
 123                          $dumper->describeValue($compare) . "] " .
 124                          $dumper->describeDifference($this->_value, $compare);
 125              }
 126          }
 127      }
 128      
 129      /**
 130       *    Test for a specific HTTP header within a header block.
 131       *      @package SimpleTest
 132       *      @subpackage WebTester
 133       */
 134      class HttpHeaderExpectation extends SimpleExpectation {
 135          var $_expected_header;
 136          var $_expected_value;
 137          
 138          /**
 139           *    Sets the field and value to compare against.
 140           *    @param string $header   Case insenstive trimmed header name.
 141           *    @param mixed $value     Optional value to compare. If not
 142           *                            given then any value will match. If
 143           *                            an expectation object then that will
 144           *                            be used instead.
 145           *    @param string $message  Optiona message override. Can use %s as
 146           *                            a placeholder for the original message.
 147           */
 148          function HttpHeaderExpectation($header, $value = false, $message = '%s') {
 149              $this->SimpleExpectation($message);
 150              $this->_expected_header = $this->_normaliseHeader($header);
 151              $this->_expected_value = $value;
 152          }
 153          
 154          /**
 155           *    Accessor for aggregated object.
 156           *    @return mixed        Expectation set in constructor.
 157           *    @access protected
 158           */
 159          function _getExpectation() {
 160              return $this->_expected_value;
 161          }
 162          
 163          /**
 164           *    Removes whitespace at ends and case variations.
 165           *    @param string $header    Name of header.
 166           *    @param string            Trimmed and lowecased header
 167           *                             name.
 168           *    @access private
 169           */
 170          function _normaliseHeader($header) {
 171              return strtolower(trim($header));
 172          }
 173          
 174          /**
 175           *    Tests the expectation. True if it matches
 176           *    a string value or an array value in any order.
 177           *    @param mixed $compare   Raw header block to search.
 178           *    @return boolean         True if header present.
 179           *    @access public
 180           */
 181          function test($compare) {
 182              return is_string($this->_findHeader($compare));
 183          }
 184          
 185          /**
 186           *    Searches the incoming result. Will extract the matching
 187           *    line as text.
 188           *    @param mixed $compare   Raw header block to search.
 189           *    @return string          Matching header line.
 190           *    @access protected
 191           */
 192          function _findHeader($compare) {
 193              $lines = split("\r\n", $compare);
 194              foreach ($lines as $line) {
 195                  if ($this->_testHeaderLine($line)) {
 196                      return $line;
 197                  }
 198              }
 199              return false;
 200          }
 201          
 202          /**
 203           *    Compares a single header line against the expectation.
 204           *    @param string $line      A single line to compare.
 205           *    @return boolean          True if matched.
 206           *    @access private
 207           */
 208          function _testHeaderLine($line) {
 209              if (count($parsed = split(':', $line, 2)) < 2) {
 210                  return false;
 211              }
 212              list($header, $value) = $parsed;
 213              if ($this->_normaliseHeader($header) != $this->_expected_header) {
 214                  return false;
 215              }
 216              return $this->_testHeaderValue($value, $this->_expected_value);
 217          }
 218          
 219          /**
 220           *    Tests the value part of the header.
 221           *    @param string $value        Value to test.
 222           *    @param mixed $expected      Value to test against.
 223           *    @return boolean             True if matched.
 224           *    @access protected
 225           */
 226          function _testHeaderValue($value, $expected) {
 227              if ($expected === false) {
 228                  return true;
 229              }
 230              if (SimpleExpectation::isExpectation($expected)) {
 231                  return $expected->test(trim($value));
 232              }
 233              return (trim($value) == trim($expected));
 234          }
 235          
 236          /**
 237           *    Returns a human readable test message.
 238           *    @param mixed $compare      Raw header block to search.
 239           *    @return string             Description of success
 240           *                               or failure.
 241           *    @access public
 242           */
 243          function testMessage($compare) {
 244              if (SimpleExpectation::isExpectation($this->_expected_value)) {
 245                  $message = $this->_expected_value->overlayMessage($compare, $this->_getDumper());
 246              } else {
 247                  $message = $this->_expected_header .
 248                          ($this->_expected_value ? ': ' . $this->_expected_value : '');
 249              }
 250              if (is_string($line = $this->_findHeader($compare))) {
 251                  return "Searching for header [$message] found [$line]";
 252              } else {
 253                  return "Failed to find header [$message]";
 254              }
 255          }
 256      }
 257        
 258      /**
 259       *    Test for a specific HTTP header within a header block that
 260       *    should not be found.
 261       *      @package SimpleTest
 262       *      @subpackage WebTester
 263       */
 264      class NoHttpHeaderExpectation extends HttpHeaderExpectation {
 265          var $_expected_header;
 266          var $_expected_value;
 267          
 268          /**
 269           *    Sets the field and value to compare against.
 270           *    @param string $unwanted   Case insenstive trimmed header name.
 271           *    @param string $message    Optiona message override. Can use %s as
 272           *                              a placeholder for the original message.
 273           */
 274          function NoHttpHeaderExpectation($unwanted, $message = '%s') {
 275              $this->HttpHeaderExpectation($unwanted, false, $message);
 276          }
 277          
 278          /**
 279           *    Tests that the unwanted header is not found.
 280           *    @param mixed $compare   Raw header block to search.
 281           *    @return boolean         True if header present.
 282           *    @access public
 283           */
 284          function test($compare) {
 285              return ($this->_findHeader($compare) === false);
 286          }
 287          
 288          /**
 289           *    Returns a human readable test message.
 290           *    @param mixed $compare      Raw header block to search.
 291           *    @return string             Description of success
 292           *                               or failure.
 293           *    @access public
 294           */
 295          function testMessage($compare) {
 296              $expectation = $this->_getExpectation();
 297              if (is_string($line = $this->_findHeader($compare))) {
 298                  return "Found unwanted header [$expectation] with [$line]";
 299              } else {
 300                  return "Did not find unwanted header [$expectation]";
 301              }
 302          }
 303      }
 304      
 305      /**
 306       *    Test for a text substring.
 307       *      @package SimpleTest
 308       *      @subpackage UnitTester
 309       */
 310      class TextExpectation extends SimpleExpectation {
 311          var $_substring;
 312          
 313          /**
 314           *    Sets the value to compare against.
 315           *    @param string $substring  Text to search for.
 316           *    @param string $message    Customised message on failure.
 317           *    @access public
 318           */
 319          function TextExpectation($substring, $message = '%s') {
 320              $this->SimpleExpectation($message);
 321              $this->_substring = $substring;
 322          }
 323          
 324          /**
 325           *    Accessor for the substring.
 326           *    @return string       Text to match.
 327           *    @access protected
 328           */
 329          function _getSubstring() {
 330              return $this->_substring;
 331          }
 332          
 333          /**
 334           *    Tests the expectation. True if the text contains the
 335           *    substring.
 336           *    @param string $compare        Comparison value.
 337           *    @return boolean               True if correct.
 338           *    @access public
 339           */
 340          function test($compare) {
 341              return (strpos($compare, $this->_substring) !== false);
 342          }
 343          
 344          /**
 345           *    Returns a human readable test message.
 346           *    @param mixed $compare      Comparison value.
 347           *    @return string             Description of success
 348           *                               or failure.
 349           *    @access public
 350           */
 351          function testMessage($compare) {
 352              if ($this->test($compare)) {
 353                  return $this->_describeTextMatch($this->_getSubstring(), $compare);
 354              } else {
 355                  $dumper = &$this->_getDumper();
 356                  return "Text [" . $this->_getSubstring() .
 357                          "] not detected in [" .
 358                          $dumper->describeValue($compare) . "]";
 359              }
 360          }
 361          
 362          /**
 363           *    Describes a pattern match including the string
 364           *    found and it's position.
 365           *    @param string $substring      Text to search for.
 366           *    @param string $subject        Subject to search.
 367           *    @access protected
 368           */
 369          function _describeTextMatch($substring, $subject) {
 370              $position = strpos($subject, $substring);
 371              $dumper = &$this->_getDumper();
 372              return "Text [$substring] detected at character [$position] in [" .
 373                      $dumper->describeValue($subject) . "] in region [" .
 374                      $dumper->clipString($subject, 100, $position) . "]";
 375          }
 376      }
 377      
 378      /**
 379       *    Fail if a substring is detected within the
 380       *    comparison text.
 381       *      @package SimpleTest
 382       *      @subpackage UnitTester
 383       */
 384      class NoTextExpectation extends TextExpectation {
 385          
 386          /**
 387           *    Sets the reject pattern
 388           *    @param string $substring  Text to search for.
 389           *    @param string $message    Customised message on failure.
 390           *    @access public
 391           */
 392          function NoTextExpectation($substring, $message = '%s') {
 393              $this->TextExpectation($substring, $message);
 394          }
 395          
 396          /**
 397           *    Tests the expectation. False if the substring appears
 398           *    in the text.
 399           *    @param string $compare        Comparison value.
 400           *    @return boolean               True if correct.
 401           *    @access public
 402           */
 403          function test($compare) {
 404              return ! parent::test($compare);
 405          }
 406          
 407          /**
 408           *    Returns a human readable test message.
 409           *    @param string $compare      Comparison value.
 410           *    @return string              Description of success
 411           *                                or failure.
 412           *    @access public
 413           */
 414          function testMessage($compare) {
 415              if ($this->test($compare)) {
 416                  $dumper = &$this->_getDumper();
 417                  return "Text [" . $this->_getSubstring() .
 418                          "] not detected in [" .
 419                          $dumper->describeValue($compare) . "]";
 420              } else {
 421                  return $this->_describeTextMatch($this->_getSubstring(), $compare);
 422              }
 423          }
 424      }
 425      
 426      /**
 427       *    Test case for testing of web pages. Allows
 428       *    fetching of pages, parsing of HTML and
 429       *    submitting forms.
 430       *    @package SimpleTest
 431       *    @subpackage WebTester
 432       */
 433      class WebTestCase extends SimpleTestCase {
 434          var $_browser;
 435          var $_ignore_errors = false;
 436          
 437          /**
 438           *    Creates an empty test case. Should be subclassed
 439           *    with test methods for a functional test case.
 440           *    @param string $label     Name of test case. Will use
 441           *                             the class name if none specified.
 442           *    @access public
 443           */
 444          function WebTestCase($label = false) {
 445              $this->SimpleTestCase($label);
 446          }
 447          
 448          /**
 449           *    Announces the start of the test.
 450           *    @param string $method    Test method just started.
 451           *    @access public
 452           */
 453          function before($method) {
 454              parent::before($method);
 455              $this->setBrowser($this->createBrowser());
 456          }
 457  
 458          /**
 459           *    Announces the end of the test. Includes private clean up.
 460           *    @param string $method    Test method just finished.
 461           *    @access public
 462           */
 463          function after($method) {
 464              $this->unsetBrowser();
 465              parent::after($method);
 466          }
 467          
 468          /**
 469           *    Gets a current browser reference for setting
 470           *    special expectations or for detailed
 471           *    examination of page fetches.
 472           *    @return SimpleBrowser     Current test browser object.
 473           *    @access public
 474           */
 475          function &getBrowser() {
 476              return $this->_browser;
 477          }
 478          
 479          /**
 480           *    Gets a current browser reference for setting
 481           *    special expectations or for detailed
 482           *    examination of page fetches.
 483           *    @param SimpleBrowser $browser    New test browser object.
 484           *    @access public
 485           */
 486          function setBrowser(&$browser) {
 487              return $this->_browser = &$browser;
 488          }
 489            
 490          /**
 491           *    Clears the current browser reference to help the
 492           *    PHP garbage collector.
 493           *    @access public
 494           */
 495          function unsetBrowser() {
 496              unset($this->_browser);
 497          }
 498        
 499          /**
 500           *    Creates a new default web browser object.
 501           *    Will be cleared at the end of the test method.
 502           *    @return TestBrowser           New browser.
 503           *    @access public
 504           */
 505          function &createBrowser() {
 506              $browser = &new SimpleBrowser();
 507              return $browser;
 508          }
 509          
 510          /**
 511           *    Gets the last response error.
 512           *    @return string    Last low level HTTP error.
 513           *    @access public
 514           */
 515          function getTransportError() {
 516              return $this->_browser->getTransportError();
 517          }
 518            
 519          /**
 520           *    Accessor for the currently selected URL.
 521           *    @return string        Current location or false if
 522           *                          no page yet fetched.
 523           *    @access public
 524           */
 525          function getUrl() {
 526              return $this->_browser->getUrl();
 527          }
 528          
 529          /**
 530           *    Dumps the current request for debugging.
 531           *    @access public
 532           */
 533          function showRequest() {
 534              $this->dump($this->_browser->getRequest());
 535          }
 536          
 537          /**
 538           *    Dumps the current HTTP headers for debugging.
 539           *    @access public
 540           */
 541          function showHeaders() {
 542              $this->dump($this->_browser->getHeaders());
 543          }
 544        
 545          /**
 546           *    Dumps the current HTML source for debugging.
 547           *    @access public
 548           */
 549          function showSource() {
 550              $this->dump($this->_browser->getContent());
 551          }
 552        
 553          /**
 554           *    Dumps the visible text only for debugging.
 555           *    @access public
 556           */
 557          function showText() {
 558              $this->dump(wordwrap($this->_browser->getContentAsText(), 80));
 559          }
 560          
 561          /**
 562           *    Simulates the closing and reopening of the browser.
 563           *    Temporary cookies will be discarded and timed
 564           *    cookies will be expired if later than the
 565           *    specified time.
 566           *    @param string/integer $date Time when session restarted.
 567           *                                If ommitted then all persistent
 568           *                                cookies are kept. Time is either
 569           *                                Cookie format string or timestamp.
 570           *    @access public
 571           */
 572          function restart($date = false) {
 573              if ($date === false) {
 574                  $date = time();
 575              }
 576              $this->_browser->restart($date);
 577          }
 578          
 579          /**
 580           *    Moves cookie expiry times back into the past.
 581           *    Useful for testing timeouts and expiries.
 582           *    @param integer $interval    Amount to age in seconds.
 583           *    @access public
 584           */
 585          function ageCookies($interval) {
 586              $this->_browser->ageCookies($interval);
 587          }
 588          
 589          /**
 590           *    Disables frames support. Frames will not be fetched
 591           *    and the frameset page will be used instead.
 592           *    @access public
 593           */
 594          function ignoreFrames() {
 595              $this->_browser->ignoreFrames();
 596          }
 597          
 598          /**
 599           *    Switches off cookie sending and recieving.
 600           *    @access public
 601           */
 602          function ignoreCookies() {
 603              $this->_browser->ignoreCookies();
 604          }
 605          
 606          /**
 607           *    Skips errors for the next request only. You might
 608           *    want to confirm that a page is unreachable for
 609           *    example.
 610           *    @access public
 611           */
 612          function ignoreErrors() {
 613              $this->_ignore_errors = true;
 614          }
 615          
 616          /**
 617           *    Issues a fail if there is a transport error anywhere
 618           *    in the current frameset. Only one such error is
 619           *    reported.
 620           *    @param string/boolean $result   HTML or failure.
 621           *    @return string/boolean $result  Passes through result.
 622           *    @access private
 623           */
 624          function _failOnError($result) {
 625              if (! $this->_ignore_errors) {
 626                  if ($error = $this->_browser->getTransportError()) {
 627                      $this->fail($error);
 628                  }
 629              }
 630              $this->_ignore_errors = false;
 631              return $result;
 632          }
 633  
 634          /**
 635           *    Adds a header to every fetch.
 636           *    @param string $header       Header line to add to every
 637           *                                request until cleared.
 638           *    @access public
 639           */
 640          function addHeader($header) {
 641              $this->_browser->addHeader($header);
 642          }
 643          
 644          /**
 645           *    Sets the maximum number of redirects before
 646           *    the web page is loaded regardless.
 647           *    @param integer $max        Maximum hops.
 648           *    @access public
 649           */
 650          function setMaximumRedirects($max) {
 651              if (! $this->_browser) {
 652                  trigger_error(
 653                          'Can only set maximum redirects in a test method, setUp() or tearDown()');
 654              }
 655              $this->_browser->setMaximumRedirects($max);
 656          }
 657          
 658          /**
 659           *    Sets the socket timeout for opening a connection and
 660           *    receiving at least one byte of information.
 661           *    @param integer $timeout      Maximum time in seconds.
 662           *    @access public
 663           */
 664          function setConnectionTimeout($timeout) {
 665              $this->_browser->setConnectionTimeout($timeout);
 666          }
 667          
 668          /**
 669           *    Sets proxy to use on all requests for when
 670           *    testing from behind a firewall. Set URL
 671           *    to false to disable.
 672           *    @param string $proxy        Proxy URL.
 673           *    @param string $username     Proxy username for authentication.
 674           *    @param string $password     Proxy password for authentication.
 675           *    @access public
 676           */
 677          function useProxy($proxy, $username = false, $password = false) {
 678              $this->_browser->useProxy($proxy, $username, $password);
 679          }
 680          
 681          /**
 682           *    Fetches a page into the page buffer. If
 683           *    there is no base for the URL then the
 684           *    current base URL is used. After the fetch
 685           *    the base URL reflects the new location.
 686           *    @param string $url          URL to fetch.
 687           *    @param hash $parameters     Optional additional GET data.
 688           *    @return boolean/string      Raw page on success.
 689           *    @access public
 690           */
 691          function get($url, $parameters = false) {
 692              return $this->_failOnError($this->_browser->get($url, $parameters));
 693          }
 694          
 695          /**
 696           *    Fetches a page by POST into the page buffer.
 697           *    If there is no base for the URL then the
 698           *    current base URL is used. After the fetch
 699           *    the base URL reflects the new location.
 700           *    @param string $url          URL to fetch.
 701           *    @param hash $parameters     Optional additional GET data.
 702           *    @return boolean/string      Raw page on success.
 703           *    @access public
 704           */
 705          function post($url, $parameters = false) {
 706              return $this->_failOnError($this->_browser->post($url, $parameters));
 707          }
 708          
 709          /**
 710           *    Does a HTTP HEAD fetch, fetching only the page
 711           *    headers. The current base URL is unchanged by this.
 712           *    @param string $url          URL to fetch.
 713           *    @param hash $parameters     Optional additional GET data.
 714           *    @return boolean             True on success.
 715           *    @access public
 716           */
 717          function head($url, $parameters = false) {
 718              return $this->_failOnError($this->_browser->head($url, $parameters));
 719          }
 720          
 721          /**
 722           *    Equivalent to hitting the retry button on the
 723           *    browser. Will attempt to repeat the page fetch.
 724           *    @return boolean     True if fetch succeeded.
 725           *    @access public
 726           */
 727          function retry() {
 728              return $this->_failOnError($this->_browser->retry());
 729          }
 730          
 731          /**
 732           *    Equivalent to hitting the back button on the
 733           *    browser.
 734           *    @return boolean     True if history entry and
 735           *                        fetch succeeded.
 736           *    @access public
 737           */
 738          function back() {
 739              return $this->_failOnError($this->_browser->back());
 740          }
 741          
 742          /**
 743           *    Equivalent to hitting the forward button on the
 744           *    browser.
 745           *    @return boolean     True if history entry and
 746           *                        fetch succeeded.
 747           *    @access public
 748           */
 749          function forward() {
 750              return $this->_failOnError($this->_browser->forward());
 751          }
 752          
 753          /**
 754           *    Retries a request after setting the authentication
 755           *    for the current realm.
 756           *    @param string $username    Username for realm.
 757           *    @param string $password    Password for realm.
 758           *    @return boolean/string     HTML on successful fetch. Note
 759           *                               that authentication may still have
 760           *                               failed.
 761           *    @access public
 762           */
 763          function authenticate($username, $password) {
 764              return $this->_failOnError(
 765                      $this->_browser->authenticate($username, $password));
 766          }
 767          
 768          /**
 769           *    Gets the cookie value for the current browser context.
 770           *    @param string $name          Name of cookie.
 771           *    @return string               Value of cookie or false if unset.
 772           *    @access public
 773           */
 774          function getCookie($name) {
 775              return $this->_browser->getCurrentCookieValue($name);
 776          }
 777          
 778          /**
 779           *    Sets a cookie in the current browser.
 780           *    @param string $name          Name of cookie.
 781           *    @param string $value         Cookie value.
 782           *    @param string $host          Host upon which the cookie is valid.
 783           *    @param string $path          Cookie path if not host wide.
 784           *    @param string $expiry        Expiry date.
 785           *    @access public
 786           */
 787          function setCookie($name, $value, $host = false, $path = '/', $expiry = false) {
 788              $this->_browser->setCookie($name, $value, $host, $path, $expiry);
 789          }
 790          
 791          /**
 792           *    Accessor for current frame focus. Will be
 793           *    false if no frame has focus.
 794           *    @return integer/string/boolean    Label if any, otherwise
 795           *                                      the position in the frameset
 796           *                                      or false if none.
 797           *    @access public
 798           */
 799          function getFrameFocus() {
 800              return $this->_browser->getFrameFocus();
 801          }
 802          
 803          /**
 804           *    Sets the focus by index. The integer index starts from 1.
 805           *    @param integer $choice    Chosen frame.
 806           *    @return boolean           True if frame exists.
 807           *    @access public
 808           */
 809          function setFrameFocusByIndex($choice) {
 810              return $this->_browser->setFrameFocusByIndex($choice);
 811          }
 812          
 813          /**
 814           *    Sets the focus by name.
 815           *    @param string $name    Chosen frame.
 816           *    @return boolean        True if frame exists.
 817           *    @access public
 818           */
 819          function setFrameFocus($name) {
 820              return $this->_browser->setFrameFocus($name);
 821          }
 822          
 823          /**
 824           *    Clears the frame focus. All frames will be searched
 825           *    for content.
 826           *    @access public
 827           */
 828          function clearFrameFocus() {
 829              return $this->_browser->clearFrameFocus();
 830          }
 831          
 832          /**
 833           *    Clicks a visible text item. Will first try buttons,
 834           *    then links and then images.
 835           *    @param string $label        Visible text or alt text.
 836           *    @return string/boolean      Raw page or false.
 837           *    @access public
 838           */
 839          function click($label) {
 840              return $this->_failOnError($this->_browser->click($label));
 841          }
 842          
 843          /**
 844           *    Checks for a click target.
 845           *    @param string $label        Visible text or alt text.
 846           *    @return boolean             True if click target.
 847           *    @access public
 848           */    
 849          function assertClickable($label, $message = '%s') {
 850              return $this->assertTrue(
 851                      $this->_browser->isClickable($label),
 852                      sprintf($message, "Click target [$label] should exist"));
 853          }
 854          
 855          /**
 856           *    Clicks the submit button by label. The owning
 857           *    form will be submitted by this.
 858           *    @param string $label    Button label. An unlabeled
 859           *                            button can be triggered by 'Submit'.
 860           *    @param hash $additional Additional form values.
 861           *    @return boolean/string  Page on success, else false.
 862           *    @access public
 863           */
 864          function clickSubmit($label = 'Submit', $additional = false) {
 865              return $this->_failOnError(
 866                      $this->_browser->clickSubmit($label, $additional));
 867          }
 868          
 869          /**
 870           *    Clicks the submit button by name attribute. The owning
 871           *    form will be submitted by this.
 872           *    @param string $name     Name attribute of button.
 873           *    @param hash $additional Additional form values.
 874           *    @return boolean/string  Page on success.
 875           *    @access public
 876           */
 877          function clickSubmitByName($name, $additional = false) {
 878              return $this->_failOnError(
 879                      $this->_browser->clickSubmitByName($name, $additional));
 880          }
 881          
 882          /**
 883           *    Clicks the submit button by ID attribute. The owning
 884           *    form will be submitted by this.
 885           *    @param string $id       ID attribute of button.
 886           *    @param hash $additional Additional form values.
 887           *    @return boolean/string  Page on success.
 888           *    @access public
 889           */
 890          function clickSubmitById($id, $additional = false) {
 891              return $this->_failOnError(
 892                      $this->_browser->clickSubmitById($id, $additional));
 893          }
 894          
 895          /**
 896           *    Checks for a valid button label.
 897           *    @param string $label        Visible text.
 898           *    @return boolean             True if click target.
 899           *    @access public
 900           */    
 901          function assertSubmit($label, $message = '%s') {
 902              return $this->assertTrue(
 903                      $this->_browser->isSubmit($label),
 904                      sprintf($message, "Submit button [$label] should exist"));
 905          }
 906          
 907          /**
 908           *    Clicks the submit image by some kind of label. Usually
 909           *    the alt tag or the nearest equivalent. The owning
 910           *    form will be submitted by this. Clicking outside of
 911           *    the boundary of the coordinates will result in
 912           *    a failure.
 913           *    @param string $label    Alt attribute of button.
 914           *    @param integer $x       X-coordinate of imaginary click.
 915           *    @param integer $y       Y-coordinate of imaginary click.
 916           *    @param hash $additional Additional form values.
 917           *    @return boolean/string  Page on success.
 918           *    @access public
 919           */
 920          function clickImage($label, $x = 1, $y = 1, $additional = false) {
 921              return $this->_failOnError(
 922                      $this->_browser->clickImage($label, $x, $y, $additional));
 923          }
 924          
 925          /**
 926           *    Clicks the submit image by the name. Usually
 927           *    the alt tag or the nearest equivalent. The owning
 928           *    form will be submitted by this. Clicking outside of
 929           *    the boundary of the coordinates will result in
 930           *    a failure.
 931           *    @param string $name     Name attribute of button.
 932           *    @param integer $x       X-coordinate of imaginary click.
 933           *    @param integer $y       Y-coordinate of imaginary click.
 934           *    @param hash $additional Additional form values.
 935           *    @return boolean/string  Page on success.
 936           *    @access public
 937           */
 938          function clickImageByName($name, $x = 1, $y = 1, $additional = false) {
 939              return $this->_failOnError(
 940                      $this->_browser->clickImageByName($name, $x, $y, $additional));
 941          }
 942          
 943          /**
 944           *    Clicks the submit image by ID attribute. The owning
 945           *    form will be submitted by this. Clicking outside of
 946           *    the boundary of the coordinates will result in
 947           *    a failure.
 948           *    @param integer/string $id   ID attribute of button.
 949           *    @param integer $x           X-coordinate of imaginary click.
 950           *    @param integer $y           Y-coordinate of imaginary click.
 951           *    @param hash $additional     Additional form values.
 952           *    @return boolean/string      Page on success.
 953           *    @access public
 954           */
 955          function clickImageById($id, $x = 1, $y = 1, $additional = false) {
 956              return $this->_failOnError(
 957                      $this->_browser->clickImageById($id, $x, $y, $additional));
 958          }
 959          
 960          /**
 961           *    Checks for a valid image with atht alt text or title.
 962           *    @param string $label        Visible text.
 963           *    @return boolean             True if click target.
 964           *    @access public
 965           */    
 966          function assertImage($label, $message = '%s') {
 967              return $this->assertTrue(
 968                      $this->_browser->isImage($label),
 969                      sprintf($message, "Image with text [$label] should exist"));
 970          }
 971          
 972          /**
 973           *    Submits a form by the ID.
 974           *    @param string $id       Form ID. No button information
 975           *                            is submitted this way.
 976           *    @return boolean/string  Page on success.
 977           *    @access public
 978           */
 979          function submitFormById($id) {
 980              return $this->_failOnError($this->_browser->submitFormById($id));
 981          }
 982          
 983          /**
 984           *    Follows a link by name. Will click the first link
 985           *    found with this link text by default, or a later
 986           *    one if an index is given. Match is case insensitive
 987           *    with normalised space.
 988           *    @param string $label     Text between the anchor tags.
 989           *    @param integer $index    Link position counting from zero.
 990           *    @return boolean/string   Page on success.
 991           *    @access public
 992           */
 993          function clickLink($label, $index = 0) {
 994              return $this->_failOnError($this->_browser->clickLink($label, $index));
 995          }
 996          
 997          /**
 998           *    Follows a link by id attribute.
 999           *    @param string $id        ID attribute value.
1000           *    @return boolean/string   Page on success.
1001           *    @access public
1002           */
1003          function clickLinkById($id) {
1004              return $this->_failOnError($this->_browser->clickLinkById($id));
1005          }
1006          
1007          /**
1008           *    Tests for the presence of a link label. Match is
1009           *    case insensitive with normalised space.
1010           *    @param string $label     Text between the anchor tags.
1011           *    @param mixed $expected   Expected URL or expectation object.
1012           *    @param string $message   Message to display. Default
1013           *                             can be embedded with %s.
1014           *    @return boolean          True if link present.
1015           *    @access public
1016           */
1017          function assertLink($label, $expected = true, $message = '%s') {
1018              $url = $this->_browser->getLink($label);
1019              if ($expected === true) {
1020                  return $this->assertTrue($url !== false, sprintf($message, "Link [$label] should exist"));
1021              }
1022              if (! SimpleExpectation::isExpectation($expected)) {
1023                  $expected = new IdenticalExpectation($expected);
1024              }
1025              return $this->assert($expected, $url->asString(), sprintf($message, "Link [$label] should match"));
1026          }
1027  
1028          /**
1029           *    Tests for the non-presence of a link label. Match is
1030           *    case insensitive with normalised space.
1031           *    @param string/integer $label    Text between the anchor tags
1032           *                                    or ID attribute.
1033           *    @param string $message          Message to display. Default
1034           *                                    can be embedded with %s.
1035           *    @return boolean                 True if link missing.
1036           *    @access public
1037           */
1038          function assertNoLink($label, $message = '%s') {
1039              return $this->assertTrue(
1040                      $this->_browser->getLink($label) === false,
1041                      sprintf($message, "Link [$label] should not exist"));
1042          }
1043          
1044          /**
1045           *    Tests for the presence of a link id attribute.
1046           *    @param string $id        Id attribute value.
1047           *    @param mixed $expected   Expected URL or expectation object.
1048           *    @param string $message   Message to display. Default
1049           *                             can be embedded with %s.
1050           *    @return boolean          True if link present.
1051           *    @access public
1052           */
1053          function assertLinkById($id, $expected = true, $message = '%s') {
1054              $url = $this->_browser->getLinkById($id);
1055              if ($expected === true) {
1056                  return $this->assertTrue($url !== false, sprintf($message, "Link ID [$id] should exist"));
1057              }
1058              if (! SimpleExpectation::isExpectation($expected)) {
1059                  $expected = new IdenticalExpectation($expected);
1060              }
1061              return $this->assert($expected, $url->asString(), sprintf($message, "Link ID [$id] should match"));
1062          }
1063  
1064          /**
1065           *    Tests for the non-presence of a link label. Match is
1066           *    case insensitive with normalised space.
1067           *    @param string $id        Id attribute value.
1068           *    @param string $message   Message to display. Default
1069           *                             can be embedded with %s.
1070           *    @return boolean          True if link missing.
1071           *    @access public
1072           */
1073          function assertNoLinkById($id, $message = '%s') {
1074              return $this->assertTrue(
1075                      $this->_browser->getLinkById($id) === false,
1076                      sprintf($message, "Link ID [$id] should not exist"));
1077          }
1078          
1079          /**
1080           *    Sets all form fields with that label, or name if there
1081           *    is no label attached.
1082           *    @param string $name    Name of field in forms.
1083           *    @param string $value   New value of field.
1084           *    @return boolean        True if field exists, otherwise false.
1085           *    @access public
1086           */
1087          function setField($label, $value) {
1088              return $this->_browser->setField($label, $value);
1089          }
1090          
1091          /**
1092           *    Sets all form fields with that name.
1093           *    @param string $name    Name of field in forms.
1094           *    @param string $value   New value of field.
1095           *    @return boolean        True if field exists, otherwise false.
1096           *    @access public
1097           */
1098          function setFieldByName($name, $value) {
1099              return $this->_browser->setFieldByName($name, $value);
1100          }
1101            
1102          /**
1103           *    Sets all form fields with that name.
1104           *    @param string/integer $id   Id of field in forms.
1105           *    @param string $value        New value of field.
1106           *    @return boolean             True if field exists, otherwise false.
1107           *    @access public
1108           */
1109          function setFieldById($id, $value) {
1110              return $this->_browser->setFieldById($id, $value);
1111          }
1112          
1113          /**
1114           *    Confirms that the form element is currently set
1115           *    to the expected value. A missing form will always
1116           *    fail. If no value is given then only the existence
1117           *    of the field is checked.
1118           *    @param string $name       Name of field in forms.
1119           *    @param mixed $expected    Expected string/array value or
1120           *                              false for unset fields.
1121           *    @param string $message    Message to display. Default
1122           *                              can be embedded with %s.
1123           *    @return boolean           True if pass.
1124           *    @access public
1125           */
1126          function assertField($label, $expected = true, $message = '%s') {
1127              $value = $this->_browser->getField($label);
1128              return $this->_assertFieldValue($label, $value, $expected, $message);
1129          }
1130          
1131          /**
1132           *    Confirms that the form element is currently set
1133           *    to the expected value. A missing form element will always
1134           *    fail. If no value is given then only the existence
1135           *    of the field is checked.
1136           *    @param string $name       Name of field in forms.
1137           *    @param mixed $expected    Expected string/array value or
1138           *                              false for unset fields.
1139           *    @param string $message    Message to display. Default
1140           *                              can be embedded with %s.
1141           *    @return boolean           True if pass.
1142           *    @access public
1143           */
1144          function assertFieldByName($name, $expected = true, $message = '%s') {
1145              $value = $this->_browser->getFieldByName($name);
1146              return $this->_assertFieldValue($name, $value, $expected, $message);
1147          }
1148           
1149          /**
1150           *    Confirms that the form element is currently set
1151           *    to the expected value. A missing form will always
1152           *    fail. If no ID is given then only the existence
1153           *    of the field is checked.
1154           *    @param string/integer $id  Name of field in forms.
1155           *    @param mixed $expected     Expected string/array value or
1156           *                               false for unset fields.
1157           *    @param string $message     Message to display. Default
1158           *                               can be embedded with %s.
1159           *    @return boolean            True if pass.
1160           *    @access public
1161           */
1162          function assertFieldById($id, $expected = true, $message = '%s') {
1163              $value = $this->_browser->getFieldById($id);
1164              return $this->_assertFieldValue($id, $value, $expected, $message);
1165          }
1166          
1167          /**
1168           *    Tests the field value against the expectation.
1169           *    @param string $identifier      Name, ID or label.
1170           *    @param mixed $value            Current field value.
1171           *    @param mixed $expected         Expected value to match.
1172           *    @param string $message         Failure message.
1173           *    @return boolean                True if pass
1174           *    @access protected
1175           */
1176          function _assertFieldValue($identifier, $value, $expected, $message) {
1177              if ($expected === true) {
1178                  return $this->assertTrue(
1179                          isset($value),
1180                          sprintf($message, "Field [$identifier] should exist"));
1181              }
1182              if (! SimpleExpectation::isExpectation($expected)) {
1183                  $identifier = str_replace('%', '%%', $identifier);
1184                  $expected = new FieldExpectation(
1185                          $expected,
1186                          "Field [$identifier] should match with [%s]");
1187              }
1188              return $this->assert($expected, $value, $message);
1189          }
1190         
1191          /**
1192           *    Checks the response code against a list
1193           *    of possible values.
1194           *    @param array $responses    Possible responses for a pass.
1195           *    @param string $message     Message to display. Default
1196           *                               can be embedded with %s.
1197           *    @return boolean            True if pass.
1198           *    @access public
1199           */
1200          function assertResponse($responses, $message = '%s') {
1201              $responses = (is_array($responses) ? $responses : array($responses));
1202              $code = $this->_browser->getResponseCode();
1203              $message = sprintf($message, "Expecting response in [" .
1204                      implode(", ", $responses) . "] got [$code]");
1205              return $this->assertTrue(in_array($code, $responses), $message);
1206          }
1207          
1208          /**
1209           *    Checks the mime type against a list
1210           *    of possible values.
1211           *    @param array $types      Possible mime types for a pass.
1212           *    @param string $message   Message to display.
1213           *    @return boolean          True if pass.
1214           *    @access public
1215           */
1216          function assertMime($types, $message = '%s') {
1217              $types = (is_array($types) ? $types : array($types));
1218              $type = $this->_browser->getMimeType();
1219              $message = sprintf($message, "Expecting mime type in [" .
1220                      implode(", ", $types) . "] got [$type]");
1221              return $this->assertTrue(in_array($type, $types), $message);
1222          }
1223          
1224          /**
1225           *    Attempt to match the authentication type within
1226           *    the security realm we are currently matching.
1227           *    @param string $authentication   Usually basic.
1228           *    @param string $message          Message to display.
1229           *    @return boolean                 True if pass.
1230           *    @access public
1231           */
1232          function assertAuthentication($authentication = false, $message = '%s') {
1233              if (! $authentication) {
1234                  $message = sprintf($message, "Expected any authentication type, got [" .
1235                          $this->_browser->getAuthentication() . "]");
1236                  return $this->assertTrue(
1237                          $this->_browser->getAuthentication(),
1238                          $message);
1239              } else {
1240                  $message = sprintf($message, "Expected authentication [$authentication] got [" .
1241                          $this->_browser->getAuthentication() . "]");
1242                  return $this->assertTrue(
1243                          strtolower($this->_browser->getAuthentication()) == strtolower($authentication),
1244                          $message);
1245              }
1246          }
1247          
1248          /**
1249           *    Checks that no authentication is necessary to view
1250           *    the desired page.
1251           *    @param string $message     Message to display.
1252           *    @return boolean            True if pass.
1253           *    @access public
1254           */
1255          function assertNoAuthentication($message = '%s') {
1256              $message = sprintf($message, "Expected no authentication type, got [" .
1257                      $this->_browser->getAuthentication() . "]");
1258              return $this->assertFalse($this->_browser->getAuthentication(), $message);
1259          }
1260          
1261          /**
1262           *    Attempts to match the current security realm.
1263           *    @param string $realm     Name of security realm.
1264           *    @param string $message   Message to display.
1265           *    @return boolean          True if pass.
1266           *    @access public
1267           */
1268          function assertRealm($realm, $message = '%s') {
1269              if (! SimpleExpectation::isExpectation($realm)) {
1270                  $realm = new EqualExpectation($realm);
1271              }
1272              return $this->assert(
1273                      $realm,
1274                      $this->_browser->getRealm(),
1275                      "Expected realm -> $message");
1276          }
1277          
1278          /**
1279           *    Checks each header line for the required value. If no
1280           *    value is given then only an existence check is made.
1281           *    @param string $header    Case insensitive header name.
1282           *    @param mixed $value      Case sensitive trimmed string to
1283           *                             match against. An expectation object
1284           *                             can be used for pattern matching.
1285           *    @return boolean          True if pass.
1286           *    @access public
1287           */
1288          function assertHeader($header, $value = false, $message = '%s') {
1289              return $this->assert(
1290                      new HttpHeaderExpectation($header, $value),
1291                      $this->_browser->getHeaders(),
1292                      $message);
1293          }
1294            
1295          /**
1296           *    @deprecated
1297           */
1298          function assertHeaderPattern($header, $pattern, $message = '%s') {
1299              return $this->assert(
1300                      new HttpHeaderExpectation($header, new PatternExpectation($pattern)),
1301                      $this->_browser->getHeaders(),
1302                      $message);
1303          }
1304  
1305          /**
1306           *    Confirms that the header type has not been received.
1307           *    Only the landing page is checked. If you want to check
1308           *    redirect pages, then you should limit redirects so
1309           *    as to capture the page you want.
1310           *    @param string $header    Case insensitive header name.
1311           *    @return boolean          True if pass.
1312           *    @access public
1313           */
1314          function assertNoHeader($header, $message = '%s') {
1315              return $this->assert(
1316                      new NoHttpHeaderExpectation($header),
1317                      $this->_browser->getHeaders(),
1318                      $message);
1319          }
1320            
1321          /**
1322           *    @deprecated
1323           */
1324          function assertNoUnwantedHeader($header, $message = '%s') {
1325              return $this->assertNoHeader($header, $message);
1326          }
1327          
1328          /**
1329           *    Tests the text between the title tags.
1330           *    @param string/SimpleExpectation $title    Expected title.
1331           *    @param string $message                    Message to display.
1332           *    @return boolean                           True if pass.
1333           *    @access public
1334           */
1335          function assertTitle($title = false, $message = '%s') {
1336              if (! SimpleExpectation::isExpectation($title)) {
1337                  $title = new EqualExpectation($title);
1338              }
1339              return $this->assert($title, $this->_browser->getTitle(), $message);
1340          }
1341          
1342          /**
1343           *    Will trigger a pass if the text is found in the plain
1344           *    text form of the page.
1345           *    @param string $text       Text to look for.
1346           *    @param string $message    Message to display.
1347           *    @return boolean           True if pass.
1348           *    @access public
1349           */
1350          function assertText($text, $message = '%s') {
1351              return $this->assert(
1352                      new TextExpectation($text),
1353                      $this->_browser->getContentAsText(),
1354                      $message);
1355          }
1356          
1357          /**
1358           *      @deprecated
1359           */
1360          function assertWantedText($text, $message = '%s') {
1361              return $this->assertText($text, $message);
1362          }
1363          
1364          /**
1365           *    Will trigger a pass if the text is not found in the plain
1366           *    text form of the page.
1367           *    @param string $text       Text to look for.
1368           *    @param string $message    Message to display.
1369           *    @return boolean           True if pass.
1370           *    @access public
1371           */
1372          function assertNoText($text, $message = '%s') {
1373              return $this->assert(
1374                      new NoTextExpectation($text),
1375                      $this->_browser->getContentAsText(),
1376                      $message);
1377          }
1378          
1379          /**
1380           *      @deprecated
1381           */
1382          function assertNoUnwantedText($text, $message = '%s') {
1383              return $this->assertNoText($text, $message);
1384          }
1385          
1386          /**
1387           *    Will trigger a pass if the Perl regex pattern
1388           *    is found in the raw content.
1389           *    @param string $pattern    Perl regex to look for including
1390           *                              the regex delimiters.
1391           *    @param string $message    Message to display.
1392           *    @return boolean           True if pass.
1393           *    @access public
1394           */
1395          function assertPattern($pattern, $message = '%s') {
1396              return $this->assert(
1397                      new PatternExpectation($pattern),
1398                      $this->_browser->getContent(),
1399                      $message);
1400          }
1401          
1402          /**
1403           *      @deprecated
1404           */
1405          function assertWantedPattern($pattern, $message = '%s') {
1406              return $this->assertPattern($pattern, $message);
1407          }
1408          
1409          /**
1410           *    Will trigger a pass if the perl regex pattern
1411           *    is not present in raw content.
1412           *    @param string $pattern    Perl regex to look for including
1413           *                              the regex delimiters.
1414           *    @param string $message    Message to display.
1415           *    @return boolean           True if pass.
1416           *    @access public
1417           */
1418          function assertNoPattern($pattern, $message = '%s') {
1419              return $this->assert(
1420                      new NoPatternExpectation($pattern),
1421                      $this->_browser->getContent(),
1422                      $message);
1423          }
1424          
1425          /**
1426           *      @deprecated
1427           */
1428          function assertNoUnwantedPattern($pattern, $message = '%s') {
1429              return $this->assertNoPattern($pattern, $message);
1430          }
1431          
1432          /**
1433           *    Checks that a cookie is set for the current page
1434           *    and optionally checks the value.
1435           *    @param string $name        Name of cookie to test.
1436           *    @param string $expected    Expected value as a string or
1437           *                               false if any value will do.
1438           *    @param string $message     Message to display.
1439           *    @return boolean            True if pass.
1440           *    @access public
1441           */
1442          function assertCookie($name, $expected = false, $message = '%s') {
1443              $value = $this->getCookie($name);
1444              if (! $expected) {
1445                  return $this->assertTrue(
1446                          $value,
1447                          sprintf($message, "Expecting cookie [$name]"));
1448              }
1449              if (! SimpleExpectation::isExpectation($expected)) {
1450                  $expected = new EqualExpectation($expected);
1451              }
1452              return $this->assert($expected, $value, "Expecting cookie [$name] -> $message");
1453          }
1454          
1455          /**
1456           *    Checks that no cookie is present or that it has
1457           *    been successfully cleared.
1458           *    @param string $name        Name of cookie to test.
1459           *    @param string $message     Message to display.
1460           *    @return boolean            True if pass.
1461           *    @access public
1462           */
1463          function assertNoCookie($name, $message = '%s') {
1464              return $this->assertTrue(
1465                      $this->getCookie($name) === false,
1466                      sprintf($message, "Not expecting cookie [$name]"));
1467          }
1468  
1469          /**
1470           *    Called from within the test methods to register
1471           *    passes and failures.
1472           *    @param boolean $result    Pass on true.
1473           *    @param string $message    Message to display describing
1474           *                              the test state.
1475           *    @return boolean           True on pass
1476           *    @access public
1477           */
1478          function assertTrue($result, $message = false) {
1479              return $this->assert(new TrueExpectation(), $result, $message);
1480          }
1481  
1482          /**
1483           *    Will be true on false and vice versa. False
1484           *    is the PHP definition of false, so that null,
1485           *    empty strings, zero and an empty array all count
1486           *    as false.
1487           *    @param boolean $result    Pass on false.
1488           *    @param string $message    Message to display.
1489           *    @return boolean           True on pass
1490           *    @access public
1491           */
1492          function assertFalse($result, $message = '%s') {
1493              return $this->assert(new FalseExpectation(), $result, $message);
1494          }
1495          
1496          /**
1497           *    Will trigger a pass if the two parameters have
1498           *    the same value only. Otherwise a fail. This
1499           *    is for testing hand extracted text, etc.
1500           *    @param mixed $first          Value to compare.
1501           *    @param mixed $second         Value to compare.
1502           *    @param string $message       Message to display.
1503           *    @return boolean              True on pass
1504           *    @access public
1505           */
1506          function assertEqual($first, $second, $message = '%s') {
1507              return $this->assert(
1508                      new EqualExpectation($first),
1509                      $second,
1510                      $message);
1511          }
1512          
1513          /**
1514           *    Will trigger a pass if the two parameters have
1515           *    a different value. Otherwise a fail. This
1516           *    is for testing hand extracted text, etc.
1517           *    @param mixed $first           Value to compare.
1518           *    @param mixed $second          Value to compare.
1519           *    @param string $message        Message to display.
1520           *    @return boolean               True on pass
1521           *    @access public
1522           */
1523          function assertNotEqual($first, $second, $message = '%s') {
1524              return $this->assert(
1525                      new NotEqualExpectation($first),
1526                      $second,
1527                      $message);
1528          }
1529  
1530          /**
1531           *    Uses a stack trace to find the line of an assertion.
1532           *    @return string           Line number of first assert*
1533           *                             method embedded in format string.
1534           *    @access public
1535           */
1536          function getAssertionLine() {
1537              $trace = new SimpleStackTrace(array('assert', 'click', 'pass', 'fail'));
1538              return $trace->traceMethod();
1539          }
1540      }
1541  ?>


Generated: Wed Jan 14 11:33:29 2009 Cross-referenced by PHPXref 0.7