public function PHPUnit_Framework_TestResult::run

Runs a TestCase.

Parameters

PHPUnit_Framework_Test $test:

File

drupal/core/vendor/phpunit/phpunit/PHPUnit/Framework/TestResult.php, line 569

Class

PHPUnit_Framework_TestResult
A TestResult collects the results of executing a test case.

Code

public function run(PHPUnit_Framework_Test $test) {
  PHPUnit_Framework_Assert::resetCount();
  $error = FALSE;
  $failure = FALSE;
  $incomplete = FALSE;
  $skipped = FALSE;
  $this
    ->startTest($test);
  $errorHandlerSet = FALSE;
  if ($this->convertErrorsToExceptions) {
    $oldErrorHandler = set_error_handler(array(
      'PHPUnit_Util_ErrorHandler',
      'handleError',
    ), E_ALL | E_STRICT);
    if ($oldErrorHandler === NULL) {
      $errorHandlerSet = TRUE;
    }
    else {
      restore_error_handler();
    }
  }
  if (self::$xdebugLoaded === NULL) {
    self::$xdebugLoaded = extension_loaded('xdebug');
    self::$useXdebug = self::$xdebugLoaded;
  }
  $useXdebug = self::$useXdebug && $this->codeCoverage !== NULL && !$test instanceof PHPUnit_Extensions_SeleniumTestCase && !$test instanceof PHPUnit_Framework_Warning;
  if ($useXdebug) {

    // We need to blacklist test source files when no whitelist is used.
    if (!$this->codeCoverage
      ->filter()
      ->hasWhitelist()) {
      $classes = PHPUnit_Util_Class::getHierarchy(get_class($test), TRUE);
      foreach ($classes as $class) {
        $this->codeCoverage
          ->filter()
          ->addFileToBlacklist($class
          ->getFileName());
      }
    }
    $this->codeCoverage
      ->start($test);
  }
  PHP_Timer::start();
  try {
    if (!$test instanceof PHPUnit_Framework_Warning && $this->strictMode && extension_loaded('pcntl') && class_exists('PHP_Invoker')) {
      switch ($test
        ->getSize()) {
        case PHPUnit_Util_Test::SMALL:
          $_timeout = $this->timeoutForSmallTests;
          break;
        case PHPUnit_Util_Test::MEDIUM:
          $_timeout = $this->timeoutForMediumTests;
          break;
        case PHPUnit_Util_Test::LARGE:
          $_timeout = $this->timeoutForLargeTests;
          break;
      }
      $invoker = new PHP_Invoker();
      $invoker
        ->invoke(array(
        $test,
        'runBare',
      ), array(), $_timeout);
    }
    else {
      $test
        ->runBare();
    }
  } catch (PHPUnit_Framework_AssertionFailedError $e) {
    $failure = TRUE;
    if ($e instanceof PHPUnit_Framework_IncompleteTestError) {
      $incomplete = TRUE;
    }
    else {
      if ($e instanceof PHPUnit_Framework_SkippedTestError) {
        $skipped = TRUE;
      }
    }
  } catch (Exception $e) {
    $error = TRUE;
  }
  $time = PHP_Timer::stop();
  $test
    ->addToAssertionCount(PHPUnit_Framework_Assert::getCount());
  if ($this->strictMode && $test
    ->getNumAssertions() == 0) {
    $incomplete = TRUE;
  }
  if ($useXdebug) {
    try {
      $this->codeCoverage
        ->stop(!$incomplete && !$skipped);
    } catch (PHP_CodeCoverage_Exception $cce) {
      $error = TRUE;
      if (!isset($e)) {
        $e = $cce;
      }
    }
  }
  if ($errorHandlerSet === TRUE) {
    restore_error_handler();
  }
  if ($error === TRUE) {
    $this
      ->addError($test, $e, $time);
  }
  else {
    if ($failure === TRUE) {
      $this
        ->addFailure($test, $e, $time);
    }
    else {
      if ($this->strictMode && $test
        ->getNumAssertions() == 0) {
        $this
          ->addFailure($test, new PHPUnit_Framework_IncompleteTestError('This test did not perform any assertions'), $time);
      }
      else {
        if ($this->strictMode && $test
          ->hasOutput()) {
          $this
            ->addFailure($test, new PHPUnit_Framework_OutputError(sprintf('This test printed output: %s', $test
            ->getActualOutput())), $time);
        }
      }
    }
  }
  $this
    ->endTest($test, $time);
}