You are here

public function PHPUnit_Framework_TestResult::run in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/phpunit/phpunit/src/Framework/TestResult.php \PHPUnit_Framework_TestResult::run()

Runs a TestCase.

Parameters

PHPUnit_Framework_Test $test:

File

vendor/phpunit/phpunit/src/Framework/TestResult.php, line 531

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;
  $risky = 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();
    }
  }
  $collectCodeCoverage = $this->codeCoverage !== null && !$test instanceof PHPUnit_Extensions_SeleniumTestCase && !$test instanceof PHPUnit_Framework_Warning;
  if ($collectCodeCoverage) {

    // We need to blacklist test source files when no whitelist is used.
    if (!$this->codeCoverage
      ->filter()
      ->hasWhitelist()) {
      $classes = $this
        ->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 && $test
      ->getSize() != PHPUnit_Util_Test::UNKNOWN && $this->beStrictAboutTestSize && 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_RiskyTestError) {
      $risky = true;
    }
    elseif ($e instanceof PHPUnit_Framework_IncompleteTestError) {
      $incomplete = true;
    }
    elseif ($e instanceof PHPUnit_Framework_SkippedTestError) {
      $skipped = true;
    }
  } catch (PHPUnit_Framework_Exception $e) {
    $error = true;
  } catch (Throwable $e) {
    $e = new PHPUnit_Framework_ExceptionWrapper($e);
    $error = true;
  } catch (Exception $e) {
    $e = new PHPUnit_Framework_ExceptionWrapper($e);
    $error = true;
  }
  $time = PHP_Timer::stop();
  $test
    ->addToAssertionCount(PHPUnit_Framework_Assert::getCount());
  if ($this->beStrictAboutTestsThatDoNotTestAnything && $test
    ->getNumAssertions() == 0) {
    $risky = true;
  }
  if ($collectCodeCoverage) {
    $append = !$risky && !$incomplete && !$skipped;
    $linesToBeCovered = array();
    $linesToBeUsed = array();
    if ($append && $test instanceof PHPUnit_Framework_TestCase) {
      $linesToBeCovered = PHPUnit_Util_Test::getLinesToBeCovered(get_class($test), $test
        ->getName(false));
      $linesToBeUsed = PHPUnit_Util_Test::getLinesToBeUsed(get_class($test), $test
        ->getName(false));
    }
    try {
      $this->codeCoverage
        ->stop($append, $linesToBeCovered, $linesToBeUsed);
    } catch (PHP_CodeCoverage_Exception_UnintentionallyCoveredCode $cce) {
      $this
        ->addFailure($test, new PHPUnit_Framework_UnintentionallyCoveredCodeError('This test executed code that is not listed as code to be covered or used:' . PHP_EOL . $cce
        ->getMessage()), $time);
    } catch (PHPUnit_Framework_InvalidCoversTargetException $cce) {
      $this
        ->addFailure($test, new PHPUnit_Framework_InvalidCoversTargetError($cce
        ->getMessage()), $time);
    } 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);
  }
  elseif ($failure === true) {
    $this
      ->addFailure($test, $e, $time);
  }
  elseif ($this->beStrictAboutTestsThatDoNotTestAnything && $test
    ->getNumAssertions() == 0) {
    $this
      ->addFailure($test, new PHPUnit_Framework_RiskyTestError('This test did not perform any assertions'), $time);
  }
  elseif ($this->beStrictAboutOutputDuringTests && $test
    ->hasOutput()) {
    $this
      ->addFailure($test, new PHPUnit_Framework_OutputError(sprintf('This test printed output: %s', $test
      ->getActualOutput())), $time);
  }
  elseif ($this->beStrictAboutTodoAnnotatedTests && $test instanceof PHPUnit_Framework_TestCase) {
    $annotations = $test
      ->getAnnotations();
    if (isset($annotations['method']['todo'])) {
      $this
        ->addFailure($test, new PHPUnit_Framework_RiskyTestError('Test method is annotated with @todo'), $time);
    }
  }
  $this
    ->endTest($test, $time);
}