[ Index ]

PHP Cross Reference of Limb3

title

Body

[close]

/tests_runner/lib/simpletest/ -> scorer.php (source)

   1  <?php
   2      /**

   3       *    base include file for SimpleTest

   4       *    @package    SimpleTest

   5       *    @subpackage    UnitTester

   6       *    @version    $Id: scorer.php 5999 2007-06-18 13:13:08Z pachanga $

   7       */
   8  
   9      /**#@+*/

  10      require_once(dirname(__FILE__) . '/invoker.php');
  11      /**#@-*/

  12  
  13      /**

  14       *    Can recieve test events and display them. Display

  15       *    is achieved by making display methods available

  16       *    and visiting the incoming event.

  17       *      @package SimpleTest

  18       *      @subpackage UnitTester

  19       *    @abstract

  20       */
  21      class SimpleScorer {
  22          var $_passes;
  23          var $_fails;
  24          var $_exceptions;
  25          var $_is_dry_run;
  26  
  27          /**

  28           *    Starts the test run with no results.

  29           *    @access public

  30           */
  31          function SimpleScorer() {
  32              $this->_passes = 0;
  33              $this->_fails = 0;
  34              $this->_exceptions = 0;
  35              $this->_is_dry_run = false;
  36          }
  37  
  38          /**

  39           *    Signals that the next evaluation will be a dry

  40           *    run. That is, the structure events will be

  41           *    recorded, but no tests will be run.

  42           *    @param boolean $is_dry        Dry run if true.

  43           *    @access public

  44           */
  45          function makeDry($is_dry = true) {
  46              $this->_is_dry_run = $is_dry;
  47          }
  48  
  49          /**

  50           *    The reporter has a veto on what should be run.

  51           *    @param string $test_case_name  name of test case.

  52           *    @param string $method          Name of test method.

  53           *    @access public

  54           */
  55          function shouldInvoke($test_case_name, $method) {
  56              return ! $this->_is_dry_run;
  57          }
  58  
  59          /**

  60           *    Can wrap the invoker in preperation for running

  61           *    a test.

  62           *    @param SimpleInvoker $invoker   Individual test runner.

  63           *    @return SimpleInvoker           Wrapped test runner.

  64           *    @access public

  65           */
  66          function &createInvoker(&$invoker) {
  67              return $invoker;
  68          }
  69  
  70          /**

  71           *    Accessor for current status. Will be false

  72           *    if there have been any failures or exceptions.

  73           *    Used for command line tools.

  74           *    @return boolean        True if no failures.

  75           *    @access public

  76           */
  77          function getStatus() {
  78              if ($this->_exceptions + $this->_fails > 0) {
  79                  return false;
  80              }
  81              return true;
  82          }
  83  
  84          /**

  85           *    Paints the start of a group test.

  86           *    @param string $test_name     Name of test or other label.

  87           *    @param integer $size         Number of test cases starting.

  88           *    @access public

  89           */
  90          function paintGroupStart($test_name, $size) {
  91          }
  92  
  93          /**

  94           *    Paints the end of a group test.

  95           *    @param string $test_name     Name of test or other label.

  96           *    @access public

  97           */
  98          function paintGroupEnd($test_name) {
  99          }
 100  
 101          /**

 102           *    Paints the start of a test case.

 103           *    @param string $test_name     Name of test or other label.

 104           *    @access public

 105           */
 106          function paintCaseStart($test_name) {
 107          }
 108  
 109          /**

 110           *    Paints the end of a test case.

 111           *    @param string $test_name     Name of test or other label.

 112           *    @access public

 113           */
 114          function paintCaseEnd($test_name) {
 115          }
 116  
 117          /**

 118           *    Paints the start of a test method.

 119           *    @param string $test_name     Name of test or other label.

 120           *    @access public

 121           */
 122          function paintMethodStart($test_name) {
 123          }
 124  
 125          /**

 126           *    Paints the end of a test method.

 127           *    @param string $test_name     Name of test or other label.

 128           *    @access public

 129           */
 130          function paintMethodEnd($test_name) {
 131          }
 132  
 133          /**

 134           *    Increments the pass count.

 135           *    @param string $message        Message is ignored.

 136           *    @access public

 137           */
 138          function paintPass($message) {
 139              $this->_passes++;
 140          }
 141  
 142          /**

 143           *    Increments the fail count.

 144           *    @param string $message        Message is ignored.

 145           *    @access public

 146           */
 147          function paintFail($message) {
 148              $this->_fails++;
 149          }
 150  
 151          /**

 152           *    Deals with PHP 4 throwing an error.

 153           *    @param string $message    Text of error formatted by

 154           *                              the test case.

 155           *    @access public

 156           */
 157          function paintError($message) {
 158              $this->_exceptions++;
 159          }
 160  
 161          /**

 162           *    Deals with PHP 5 throwing an exception.

 163           *    @param Exception $exception    The actual exception thrown.

 164           *    @access public

 165           */
 166          function paintException($exception) {
 167              $this->_exceptions++;
 168          }
 169          
 170          /**

 171           *    Prints the message for skipping tests.

 172           *    @param string $message    Text of skip condition.

 173           *    @access public

 174           */
 175  		function paintSkip($message) {
 176          }
 177  
 178          /**

 179           *    Accessor for the number of passes so far.

 180           *    @return integer       Number of passes.

 181           *    @access public

 182           */
 183          function getPassCount() {
 184              return $this->_passes;
 185          }
 186  
 187          /**

 188           *    Accessor for the number of fails so far.

 189           *    @return integer       Number of fails.

 190           *    @access public

 191           */
 192          function getFailCount() {
 193              return $this->_fails;
 194          }
 195  
 196          /**

 197           *    Accessor for the number of untrapped errors

 198           *    so far.

 199           *    @return integer       Number of exceptions.

 200           *    @access public

 201           */
 202          function getExceptionCount() {
 203              return $this->_exceptions;
 204          }
 205  
 206          /**

 207           *    Paints a simple supplementary message.

 208           *    @param string $message        Text to display.

 209           *    @access public

 210           */
 211          function paintMessage($message) {
 212          }
 213  
 214          /**

 215           *    Paints a formatted ASCII message such as a

 216           *    variable dump.

 217           *    @param string $message        Text to display.

 218           *    @access public

 219           */
 220          function paintFormattedMessage($message) {
 221          }
 222  
 223          /**

 224           *    By default just ignores user generated events.

 225           *    @param string $type        Event type as text.

 226           *    @param mixed $payload      Message or object.

 227           *    @access public

 228           */
 229          function paintSignal($type, $payload) {
 230          }
 231      }
 232  
 233      /**

 234       *    Recipient of generated test messages that can display

 235       *    page footers and headers. Also keeps track of the

 236       *    test nesting. This is the main base class on which

 237       *    to build the finished test (page based) displays.

 238       *      @package SimpleTest

 239       *      @subpackage UnitTester

 240       */
 241      class SimpleReporter extends SimpleScorer {
 242          var $_test_stack;
 243          var $_size;
 244          var $_progress;
 245  
 246          /**

 247           *    Starts the display with no results in.

 248           *    @access public

 249           */
 250          function SimpleReporter() {
 251              $this->SimpleScorer();
 252              $this->_test_stack = array();
 253              $this->_size = null;
 254              $this->_progress = 0;
 255          }
 256          
 257          /**

 258           *    Gets the formatter for variables and other small

 259           *    generic data items.

 260           *    @return SimpleDumper          Formatter.

 261           *    @access public

 262           */
 263          function getDumper() {
 264              return new SimpleDumper();
 265          }
 266  
 267          /**

 268           *    Paints the start of a group test. Will also paint

 269           *    the page header and footer if this is the

 270           *    first test. Will stash the size if the first

 271           *    start.

 272           *    @param string $test_name   Name of test that is starting.

 273           *    @param integer $size       Number of test cases starting.

 274           *    @access public

 275           */
 276          function paintGroupStart($test_name, $size) {
 277              if (! isset($this->_size)) {
 278                  $this->_size = $size;
 279              }
 280              if (count($this->_test_stack) == 0) {
 281                  $this->paintHeader($test_name);
 282              }
 283              $this->_test_stack[] = $test_name;
 284          }
 285  
 286          /**

 287           *    Paints the end of a group test. Will paint the page

 288           *    footer if the stack of tests has unwound.

 289           *    @param string $test_name   Name of test that is ending.

 290           *    @param integer $progress   Number of test cases ending.

 291           *    @access public

 292           */
 293          function paintGroupEnd($test_name) {
 294              array_pop($this->_test_stack);
 295              if (count($this->_test_stack) == 0) {
 296                  $this->paintFooter($test_name);
 297              }
 298          }
 299  
 300          /**

 301           *    Paints the start of a test case. Will also paint

 302           *    the page header and footer if this is the

 303           *    first test. Will stash the size if the first

 304           *    start.

 305           *    @param string $test_name   Name of test that is starting.

 306           *    @access public

 307           */
 308          function paintCaseStart($test_name) {
 309              if (! isset($this->_size)) {
 310                  $this->_size = 1;
 311              }
 312              if (count($this->_test_stack) == 0) {
 313                  $this->paintHeader($test_name);
 314              }
 315              $this->_test_stack[] = $test_name;
 316          }
 317  
 318          /**

 319           *    Paints the end of a test case. Will paint the page

 320           *    footer if the stack of tests has unwound.

 321           *    @param string $test_name   Name of test that is ending.

 322           *    @access public

 323           */
 324          function paintCaseEnd($test_name) {
 325              $this->_progress++;
 326              array_pop($this->_test_stack);
 327              if (count($this->_test_stack) == 0) {
 328                  $this->paintFooter($test_name);
 329              }
 330          }
 331  
 332          /**

 333           *    Paints the start of a test method.

 334           *    @param string $test_name   Name of test that is starting.

 335           *    @access public

 336           */
 337          function paintMethodStart($test_name) {
 338              $this->_test_stack[] = $test_name;
 339          }
 340  
 341          /**

 342           *    Paints the end of a test method. Will paint the page

 343           *    footer if the stack of tests has unwound.

 344           *    @param string $test_name   Name of test that is ending.

 345           *    @access public

 346           */
 347          function paintMethodEnd($test_name) {
 348              array_pop($this->_test_stack);
 349          }
 350  
 351          /**

 352           *    Paints the test document header.

 353           *    @param string $test_name     First test top level

 354           *                                 to start.

 355           *    @access public

 356           *    @abstract

 357           */
 358          function paintHeader($test_name) {
 359          }
 360  
 361          /**

 362           *    Paints the test document footer.

 363           *    @param string $test_name        The top level test.

 364           *    @access public

 365           *    @abstract

 366           */
 367          function paintFooter($test_name) {
 368          }
 369  
 370          /**

 371           *    Accessor for internal test stack. For

 372           *    subclasses that need to see the whole test

 373           *    history for display purposes.

 374           *    @return array     List of methods in nesting order.

 375           *    @access public

 376           */
 377          function getTestList() {
 378              return $this->_test_stack;
 379          }
 380  
 381          /**

 382           *    Accessor for total test size in number

 383           *    of test cases. Null until the first

 384           *    test is started.

 385           *    @return integer   Total number of cases at start.

 386           *    @access public

 387           */
 388          function getTestCaseCount() {
 389              return $this->_size;
 390          }
 391  
 392          /**

 393           *    Accessor for the number of test cases

 394           *    completed so far.

 395           *    @return integer   Number of ended cases.

 396           *    @access public

 397           */
 398          function getTestCaseProgress() {
 399              return $this->_progress;
 400          }
 401  
 402          /**

 403           *    Static check for running in the comand line.

 404           *    @return boolean        True if CLI.

 405           *    @access public

 406           *    @static

 407           */
 408          function inCli() {
 409              return php_sapi_name() == 'cli';
 410          }
 411      }
 412  
 413      /**

 414       *    For modifying the behaviour of the visual reporters.

 415       *      @package SimpleTest

 416       *      @subpackage UnitTester

 417       */
 418      class SimpleReporterDecorator {
 419          var $_reporter;
 420  
 421          /**

 422           *    Mediates between the reporter and the test case.

 423           *    @param SimpleScorer $reporter       Reporter to receive events.

 424           */
 425          function SimpleReporterDecorator(&$reporter) {
 426              $this->_reporter = &$reporter;
 427          }
 428  
 429          /**

 430           *    Signals that the next evaluation will be a dry

 431           *    run. That is, the structure events will be

 432           *    recorded, but no tests will be run.

 433           *    @param boolean $is_dry        Dry run if true.

 434           *    @access public

 435           */
 436          function makeDry($is_dry = true) {
 437              $this->_reporter->makeDry($is_dry);
 438          }
 439  
 440          /**

 441           *    Accessor for current status. Will be false

 442           *    if there have been any failures or exceptions.

 443           *    Used for command line tools.

 444           *    @return boolean        True if no failures.

 445           *    @access public

 446           */
 447          function getStatus() {
 448              return $this->_reporter->getStatus();
 449          }
 450  
 451          /**

 452           *    The reporter has a veto on what should be run.

 453           *    @param string $test_case_name  name of test case.

 454           *    @param string $method          Name of test method.

 455           *    @return boolean                True if test should be run.

 456           *    @access public

 457           */
 458          function shouldInvoke($test_case_name, $method) {
 459              return $this->_reporter->shouldInvoke($test_case_name, $method);
 460          }
 461  
 462          /**

 463           *    Can wrap the invoker in preperation for running

 464           *    a test.

 465           *    @param SimpleInvoker $invoker   Individual test runner.

 466           *    @return SimpleInvoker           Wrapped test runner.

 467           *    @access public

 468           */
 469          function &createInvoker(&$invoker) {
 470              return $this->_reporter->createInvoker($invoker);
 471          }
 472          
 473          /**

 474           *    Gets the formatter for variables and other small

 475           *    generic data items.

 476           *    @return SimpleDumper          Formatter.

 477           *    @access public

 478           */
 479          function getDumper() {
 480              return $this->_reporter->getDumper();
 481          }
 482  
 483          /**

 484           *    Paints the start of a group test.

 485           *    @param string $test_name     Name of test or other label.

 486           *    @param integer $size         Number of test cases starting.

 487           *    @access public

 488           */
 489          function paintGroupStart($test_name, $size) {
 490              $this->_reporter->paintGroupStart($test_name, $size);
 491          }
 492  
 493          /**

 494           *    Paints the end of a group test.

 495           *    @param string $test_name     Name of test or other label.

 496           *    @access public

 497           */
 498          function paintGroupEnd($test_name) {
 499              $this->_reporter->paintGroupEnd($test_name);
 500          }
 501  
 502          /**

 503           *    Paints the start of a test case.

 504           *    @param string $test_name     Name of test or other label.

 505           *    @access public

 506           */
 507          function paintCaseStart($test_name) {
 508              $this->_reporter->paintCaseStart($test_name);
 509          }
 510  
 511          /**

 512           *    Paints the end of a test case.

 513           *    @param string $test_name     Name of test or other label.

 514           *    @access public

 515           */
 516          function paintCaseEnd($test_name) {
 517              $this->_reporter->paintCaseEnd($test_name);
 518          }
 519  
 520          /**

 521           *    Paints the start of a test method.

 522           *    @param string $test_name     Name of test or other label.

 523           *    @access public

 524           */
 525          function paintMethodStart($test_name) {
 526              $this->_reporter->paintMethodStart($test_name);
 527          }
 528  
 529          /**

 530           *    Paints the end of a test method.

 531           *    @param string $test_name     Name of test or other label.

 532           *    @access public

 533           */
 534          function paintMethodEnd($test_name) {
 535              $this->_reporter->paintMethodEnd($test_name);
 536          }
 537  
 538          /**

 539           *    Chains to the wrapped reporter.

 540           *    @param string $message        Message is ignored.

 541           *    @access public

 542           */
 543          function paintPass($message) {
 544              $this->_reporter->paintPass($message);
 545          }
 546  
 547          /**

 548           *    Chains to the wrapped reporter.

 549           *    @param string $message        Message is ignored.

 550           *    @access public

 551           */
 552          function paintFail($message) {
 553              $this->_reporter->paintFail($message);
 554          }
 555  
 556          /**

 557           *    Chains to the wrapped reporter.

 558           *    @param string $message    Text of error formatted by

 559           *                              the test case.

 560           *    @access public

 561           */
 562          function paintError($message) {
 563              $this->_reporter->paintError($message);
 564          }
 565  
 566          /**

 567           *    Chains to the wrapped reporter.

 568           *    @param Exception $exception        Exception to show.

 569           *    @access public

 570           */
 571          function paintException($exception) {
 572              $this->_reporter->paintException($exception);
 573          }
 574          
 575          /**

 576           *    Prints the message for skipping tests.

 577           *    @param string $message    Text of skip condition.

 578           *    @access public

 579           */
 580  		function paintSkip($message) {
 581              $this->_reporter->paintSkip($message);
 582          }
 583  
 584          /**

 585           *    Chains to the wrapped reporter.

 586           *    @param string $message        Text to display.

 587           *    @access public

 588           */
 589          function paintMessage($message) {
 590              $this->_reporter->paintMessage($message);
 591          }
 592  
 593          /**

 594           *    Chains to the wrapped reporter.

 595           *    @param string $message        Text to display.

 596           *    @access public

 597           */
 598          function paintFormattedMessage($message) {
 599              $this->_reporter->paintFormattedMessage($message);
 600          }
 601  
 602          /**

 603           *    Chains to the wrapped reporter.

 604           *    @param string $type        Event type as text.

 605           *    @param mixed $payload      Message or object.

 606           *    @return boolean            Should return false if this

 607           *                               type of signal should fail the

 608           *                               test suite.

 609           *    @access public

 610           */
 611          function paintSignal($type, &$payload) {
 612              $this->_reporter->paintSignal($type, $payload);
 613          }
 614      }
 615  
 616      /**

 617       *    For sending messages to multiple reporters at

 618       *    the same time.

 619       *      @package SimpleTest

 620       *      @subpackage UnitTester

 621       */
 622      class MultipleReporter {
 623          var $_reporters = array();
 624  
 625          /**

 626           *    Adds a reporter to the subscriber list.

 627           *    @param SimpleScorer $reporter     Reporter to receive events.

 628           *    @access public

 629           */
 630          function attachReporter(&$reporter) {
 631              $this->_reporters[] = &$reporter;
 632          }
 633  
 634          /**

 635           *    Signals that the next evaluation will be a dry

 636           *    run. That is, the structure events will be

 637           *    recorded, but no tests will be run.

 638           *    @param boolean $is_dry        Dry run if true.

 639           *    @access public

 640           */
 641          function makeDry($is_dry = true) {
 642              for ($i = 0; $i < count($this->_reporters); $i++) {
 643                  $this->_reporters[$i]->makeDry($is_dry);
 644              }
 645          }
 646  
 647          /**

 648           *    Accessor for current status. Will be false

 649           *    if there have been any failures or exceptions.

 650           *    If any reporter reports a failure, the whole

 651           *    suite fails.

 652           *    @return boolean        True if no failures.

 653           *    @access public

 654           */
 655          function getStatus() {
 656              for ($i = 0; $i < count($this->_reporters); $i++) {
 657                  if (! $this->_reporters[$i]->getStatus()) {
 658                      return false;
 659                  }
 660              }
 661              return true;
 662          }
 663  
 664          /**

 665           *    The reporter has a veto on what should be run.

 666           *    It requires all reporters to want to run the method.

 667           *    @param string $test_case_name  name of test case.

 668           *    @param string $method          Name of test method.

 669           *    @access public

 670           */
 671          function shouldInvoke($test_case_name, $method) {
 672              for ($i = 0; $i < count($this->_reporters); $i++) {
 673                  if (! $this->_reporters[$i]->shouldInvoke($test_case_name, $method)) {
 674                      return false;
 675                  }
 676              }
 677              return true;
 678          }
 679  
 680          /**

 681           *    Every reporter gets a chance to wrap the invoker.

 682           *    @param SimpleInvoker $invoker   Individual test runner.

 683           *    @return SimpleInvoker           Wrapped test runner.

 684           *    @access public

 685           */
 686          function &createInvoker(&$invoker) {
 687              for ($i = 0; $i < count($this->_reporters); $i++) {
 688                  $invoker = &$this->_reporters[$i]->createInvoker($invoker);
 689              }
 690              return $invoker;
 691          }
 692          
 693          /**

 694           *    Gets the formatter for variables and other small

 695           *    generic data items.

 696           *    @return SimpleDumper          Formatter.

 697           *    @access public

 698