You are here

BaseTestRunner.php in Zircon Profile 8

Same filename and directory in other branches
  1. 8.0 vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php

File

vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php
View source
<?php

/*
 * This file is part of PHPUnit.
 *
 * (c) Sebastian Bergmann <sebastian@phpunit.de>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Base class for all test runners.
 *
 * @since Class available since Release 2.0.0
 */
abstract class PHPUnit_Runner_BaseTestRunner {
  const STATUS_PASSED = 0;
  const STATUS_SKIPPED = 1;
  const STATUS_INCOMPLETE = 2;
  const STATUS_FAILURE = 3;
  const STATUS_ERROR = 4;
  const STATUS_RISKY = 5;
  const SUITE_METHODNAME = 'suite';

  /**
   * Returns the loader to be used.
   *
   * @return PHPUnit_Runner_TestSuiteLoader
   */
  public function getLoader() {
    return new PHPUnit_Runner_StandardTestSuiteLoader();
  }

  /**
   * Returns the Test corresponding to the given suite.
   * This is a template method, subclasses override
   * the runFailed() and clearStatus() methods.
   *
   * @param  string                 $suiteClassName
   * @param  string                 $suiteClassFile
   * @param  mixed                  $suffixes
   * @return PHPUnit_Framework_Test
   */
  public function getTest($suiteClassName, $suiteClassFile = '', $suffixes = '') {
    if (is_dir($suiteClassName) && !is_file($suiteClassName . '.php') && empty($suiteClassFile)) {
      $facade = new File_Iterator_Facade();
      $files = $facade
        ->getFilesAsArray($suiteClassName, $suffixes);
      $suite = new PHPUnit_Framework_TestSuite($suiteClassName);
      $suite
        ->addTestFiles($files);
      return $suite;
    }
    try {
      $testClass = $this
        ->loadSuiteClass($suiteClassName, $suiteClassFile);
    } catch (PHPUnit_Framework_Exception $e) {
      $this
        ->runFailed($e
        ->getMessage());
      return;
    }
    try {
      $suiteMethod = $testClass
        ->getMethod(self::SUITE_METHODNAME);
      if (!$suiteMethod
        ->isStatic()) {
        $this
          ->runFailed('suite() method must be static.');
        return;
      }
      try {
        $test = $suiteMethod
          ->invoke(null, $testClass
          ->getName());
      } catch (ReflectionException $e) {
        $this
          ->runFailed(sprintf("Failed to invoke suite() method.\n%s", $e
          ->getMessage()));
        return;
      }
    } catch (ReflectionException $e) {
      try {
        $test = new PHPUnit_Framework_TestSuite($testClass);
      } catch (PHPUnit_Framework_Exception $e) {
        $test = new PHPUnit_Framework_TestSuite();
        $test
          ->setName($suiteClassName);
      }
    }
    $this
      ->clearStatus();
    return $test;
  }

  /**
   * Returns the loaded ReflectionClass for a suite name.
   *
   * @param  string          $suiteClassName
   * @param  string          $suiteClassFile
   * @return ReflectionClass
   */
  protected function loadSuiteClass($suiteClassName, $suiteClassFile = '') {
    $loader = $this
      ->getLoader();
    return $loader
      ->load($suiteClassName, $suiteClassFile);
  }

  /**
   * Clears the status message.
   */
  protected function clearStatus() {
  }

  /**
   * Override to define how to handle a failed loading of
   * a test suite.
   *
   * @param string $message
   */
  protected abstract function runFailed($message);

}

Classes

Namesort descending Description
PHPUnit_Runner_BaseTestRunner Base class for all test runners.