private function assessOutputMatch(Job $job, $content) { if (!Tester\Assert::isMatching($content, $job->getOutput())) { Dumper::saveOutput($job->getFile(), $job->getOutput(), '.actual'); Dumper::saveOutput($job->getFile(), $content, '.expected'); return array(Runner::FAILED, 'Failed: output should match ' . Dumper::toLine(rtrim($content))); } }
/** @return int|NULL */ public function run() { Environment::setupColors(); Environment::setupErrors(); ob_start(); $cmd = $this->loadOptions(); Environment::$debugMode = (bool) $this->options['--debug']; if (isset($this->options['--colors'])) { Environment::$useColors = (bool) $this->options['--colors']; } elseif (in_array($this->options['-o'], ['tap', 'junit'])) { Environment::$useColors = FALSE; } if ($cmd->isEmpty() || $this->options['--help']) { $cmd->help(); return; } $this->createPhpInterpreter(); if ($this->options['--info']) { $job = new Job(__DIR__ . '/info.php', $this->interpreter); $job->run(); echo $job->getOutput(); return; } if ($this->options['--coverage']) { $coverageFile = $this->prepareCodeCoverage(); } $runner = $this->createRunner(); $runner->setEnvironmentVariable(Environment::RUNNER, 1); $runner->setEnvironmentVariable(Environment::COLORS, (int) Environment::$useColors); if (isset($coverageFile)) { $runner->setEnvironmentVariable(Environment::COVERAGE, $coverageFile); } if ($this->options['-o'] !== NULL) { ob_clean(); } ob_end_flush(); if ($this->options['--watch']) { $this->watch($runner); return; } $result = $runner->run(); if (isset($coverageFile) && preg_match('#\\.(?:html?|xml)\\z#', $coverageFile)) { $this->finishCodeCoverage($coverageFile); } return $result ? 0 : 1; }
public function __construct($path, $args = NULL) { $this->path = Helpers::escapeArg($path); $proc = proc_open("{$this->path} -n {$args} -v", array(array('pipe', 'r'), array('pipe', 'w'), array('pipe', 'w')), $pipes, NULL, NULL, array('bypass_shell' => TRUE)); $output = stream_get_contents($pipes[1]); $this->error = trim(stream_get_contents($pipes[2])); if (proc_close($proc)) { throw new \Exception("Unable to run '{$path}': " . preg_replace('#[\\r\\n ]+#', ' ', $this->error)); } elseif (!preg_match('#^PHP (\\S+).*c(g|l)i#i', $output, $matches)) { throw new \Exception("Unable to detect PHP version (output: {$output})."); } $this->version = $matches[1]; $this->cgi = strcasecmp($matches[2], 'g') === 0; $this->arguments = $args; $job = new Job(__DIR__ . '/info.php', $this, array('xdebug')); $job->run(); $this->xdebug = !$job->getExitCode(); }
/** @return int|NULL */ public function run() { Environment::setupColors(); Environment::setupErrors(); ob_start(); $cmd = $this->loadOptions(); Environment::$debugMode = (bool) $this->options['--debug']; if (isset($this->options['--colors'])) { Environment::$useColors = (bool) $this->options['--colors']; } elseif ($this->options['-o'] === 'tap') { Environment::$useColors = FALSE; } if ($cmd->isEmpty() || $this->options['--help']) { $cmd->help(); return; } $this->createPhpInterpreter(); if ($this->options['--info']) { $job = new Job(__DIR__ . '/info.php', $this->interpreter); $job->run(); echo $job->getOutput(); return; } if ($this->options['--coverage']) { $coverageFile = $this->prepareCodeCoverage(); } $runner = $this->createRunner(); if ($this->options['-o'] !== NULL) { ob_clean(); } ob_end_flush(); if ($this->options['--watch']) { $this->watch($runner); return; } $result = $runner->run(); if (isset($coverageFile)) { $this->finishCodeCoverage($coverageFile); } return $result ? 0 : 1; }