You are here

class PHPUnit_Util_PHP_Windows in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/phpunit/phpunit/src/Util/PHP/Windows.php \PHPUnit_Util_PHP_Windows

Windows utility for PHP sub-processes.

@since Class available since Release 3.5.12

Hierarchy

Expanded class hierarchy of PHPUnit_Util_PHP_Windows

File

vendor/phpunit/phpunit/src/Util/PHP/Windows.php, line 18

View source
class PHPUnit_Util_PHP_Windows extends PHPUnit_Util_PHP_Default {

  /**
   * @var string
   */
  private $tempFile;

  /**
   * {@inheritdoc}
   *
   * Reading from STDOUT or STDERR hangs forever on Windows if the output is
   * too large.
   *
   * @see https://bugs.php.net/bug.php?id=51800
   */
  public function runJob($job, array $settings = array()) {
    $runtime = new Runtime();
    if (false === ($stdout_handle = tmpfile())) {
      throw new PHPUnit_Framework_Exception('A temporary file could not be created; verify that your TEMP environment variable is writable');
    }
    $process = proc_open($runtime
      ->getBinary() . $this
      ->settingsToParameters($settings), array(
      0 => array(
        'pipe',
        'r',
      ),
      1 => $stdout_handle,
      2 => array(
        'pipe',
        'w',
      ),
    ), $pipes);
    if (!is_resource($process)) {
      throw new PHPUnit_Framework_Exception('Unable to spawn worker process');
    }
    $this
      ->process($pipes[0], $job);
    fclose($pipes[0]);
    $stderr = stream_get_contents($pipes[2]);
    fclose($pipes[2]);
    proc_close($process);
    rewind($stdout_handle);
    $stdout = stream_get_contents($stdout_handle);
    fclose($stdout_handle);
    $this
      ->cleanup();
    return array(
      'stdout' => $stdout,
      'stderr' => $stderr,
    );
  }

  /**
   * @param  resource                    $pipe
   * @param  string                      $job
   * @throws PHPUnit_Framework_Exception
   * @since  Method available since Release 3.5.12
   */
  protected function process($pipe, $job) {
    if (!($this->tempFile = tempnam(sys_get_temp_dir(), 'PHPUnit')) || file_put_contents($this->tempFile, $job) === false) {
      throw new PHPUnit_Framework_Exception('Unable to write temporary file');
    }
    fwrite($pipe, '<?php require_once ' . var_export($this->tempFile, true) . '; ?>');
  }

  /**
   * @since Method available since Release 3.5.12
   */
  protected function cleanup() {
    unlink($this->tempFile);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
PHPUnit_Util_PHP::factory public static function @since Method available since Release 3.5.12
PHPUnit_Util_PHP::getException private function Gets the thrown exception from a PHPUnit_Framework_TestFailure.
PHPUnit_Util_PHP::processChildResult private function Processes the TestResult object from an isolated process.
PHPUnit_Util_PHP::runTestJob public function Runs a single test in a separate PHP process.
PHPUnit_Util_PHP::settingsToParameters protected function @since Method available since Release 4.0.0
PHPUnit_Util_PHP_Windows::$tempFile private property
PHPUnit_Util_PHP_Windows::cleanup protected function @since Method available since Release 3.5.12 Overrides PHPUnit_Util_PHP_Default::cleanup
PHPUnit_Util_PHP_Windows::process protected function @since Method available since Release 3.5.12 Overrides PHPUnit_Util_PHP_Default::process
PHPUnit_Util_PHP_Windows::runJob public function Reading from STDOUT or STDERR hangs forever on Windows if the output is too large. Overrides PHPUnit_Util_PHP_Default::runJob