You are here

private function PHPUnit_Util_PHP::processChildResult in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/phpunit/phpunit/src/Util/PHP.php \PHPUnit_Util_PHP::processChildResult()

Processes the TestResult object from an isolated process.

@since Method available since Release 3.5.0

Parameters

PHPUnit_Framework_Test $test:

PHPUnit_Framework_TestResult $result:

string $stdout:

string $stderr:

1 call to PHPUnit_Util_PHP::processChildResult()
PHPUnit_Util_PHP::runTestJob in vendor/phpunit/phpunit/src/Util/PHP.php
Runs a single test in a separate PHP process.

File

vendor/phpunit/phpunit/src/Util/PHP.php, line 88

Class

PHPUnit_Util_PHP
Utility methods for PHP sub-processes.

Code

private function processChildResult(PHPUnit_Framework_Test $test, PHPUnit_Framework_TestResult $result, $stdout, $stderr) {
  $time = 0;
  if (!empty($stderr)) {
    $result
      ->addError($test, new PHPUnit_Framework_Exception(trim($stderr)), $time);
  }
  else {
    set_error_handler(function ($errno, $errstr, $errfile, $errline) {
      throw new ErrorException($errstr, $errno, $errno, $errfile, $errline);
    });
    try {
      if (strpos($stdout, "#!/usr/bin/env php\n") === 0) {
        $stdout = substr($stdout, 19);
      }
      $childResult = unserialize(str_replace("#!/usr/bin/env php\n", '', $stdout));
      restore_error_handler();
    } catch (ErrorException $e) {
      restore_error_handler();
      $childResult = false;
      $result
        ->addError($test, new PHPUnit_Framework_Exception(trim($stdout), 0, $e), $time);
    }
    if ($childResult !== false) {
      if (!empty($childResult['output'])) {
        $output = $childResult['output'];
      }
      $test
        ->setResult($childResult['testResult']);
      $test
        ->addToAssertionCount($childResult['numAssertions']);
      $childResult = $childResult['result'];
      if ($result
        ->getCollectCodeCoverageInformation()) {
        $result
          ->getCodeCoverage()
          ->merge($childResult
          ->getCodeCoverage());
      }
      $time = $childResult
        ->time();
      $notImplemented = $childResult
        ->notImplemented();
      $risky = $childResult
        ->risky();
      $skipped = $childResult
        ->skipped();
      $errors = $childResult
        ->errors();
      $failures = $childResult
        ->failures();
      if (!empty($notImplemented)) {
        $result
          ->addError($test, $this
          ->getException($notImplemented[0]), $time);
      }
      elseif (!empty($risky)) {
        $result
          ->addError($test, $this
          ->getException($risky[0]), $time);
      }
      elseif (!empty($skipped)) {
        $result
          ->addError($test, $this
          ->getException($skipped[0]), $time);
      }
      elseif (!empty($errors)) {
        $result
          ->addError($test, $this
          ->getException($errors[0]), $time);
      }
      elseif (!empty($failures)) {
        $result
          ->addFailure($test, $this
          ->getException($failures[0]), $time);
      }
    }
  }
  $result
    ->endTest($test, $time);
  if (!empty($output)) {
    print $output;
  }
}