/** * Runs tests based on the given PHPUnit_Framework_TestSuite object. * * @param PHPUnit_Framework_TestSuite $suite */ public function run($suite) { $testResult = new PHPUnit_Framework_TestResult(); $printer = new Stagehand_TestRunner_Runner_PHPUnitRunner_Printer_ResultPrinter(null, true, $this->config->colors); $arguments = array(); $arguments['printer'] = $printer; Stagehand_TestRunner_Runner_PHPUnitRunner_TestDox_Stream::register(); $arguments['listeners'] = array(new Stagehand_TestRunner_Runner_PHPUnitRunner_Printer_TestDoxPrinter(fopen('testdox://' . spl_object_hash($testResult), 'w'), $this->config->colors, $this->prettifier())); if (!$this->config->printsDetailedProgressReport) { $arguments['listeners'][] = new Stagehand_TestRunner_Runner_PHPUnitRunner_Printer_ProgressPrinter(null, false, $this->config->colors); } else { $arguments['listeners'][] = new Stagehand_TestRunner_Runner_PHPUnitRunner_Printer_DetailedProgressPrinter(null, false, $this->config->colors); } if ($this->config->logsResultsInJUnitXML) { $junitXMLListener = new Stagehand_TestRunner_Runner_PHPUnitRunner_Printer_JUnitXMLPrinter($this->config->junitXMLFile); if (!$this->config->logsResultsInJUnitXMLInRealtime) { $xmlWriter = new Stagehand_TestRunner_JUnitXMLWriter_JUnitXMLDOMWriter(array($junitXMLListener, 'write')); } else { $xmlWriter = $this->junitXMLStreamWriter(array($junitXMLListener, 'write')); } $junitXMLListener->setXMLWriter($xmlWriter); $arguments['listeners'][] = $junitXMLListener; } if ($this->config->stopsOnFailure) { $arguments['stopOnFailure'] = true; $arguments['stopOnError'] = true; } if (!is_null($this->config->phpunitConfigFile)) { $arguments['configuration'] = $this->config->phpunitConfigFile; } $testRunner = new Stagehand_TestRunner_Runner_PHPUnitRunner_TestRunner(); $testRunner->setTestResult($testResult); $testRunner->doRun($suite, $arguments); if ($this->config->usesGrowl) { ob_start(); $printer->printResult($testResult); $output = ob_get_contents(); ob_end_clean(); if (preg_match('/^(?:\\x1b\\[30;42m\\x1b\\[2K)?(OK .+)/m', $output, $matches)) { $this->notification->name = 'Green'; $this->notification->description = $matches[1]; } elseif (preg_match('/^(?:\\x1b\\[37;41m\\x1b\\[2K)?(FAILURES!)\\s^(?:\\x1b\\[0m\\x1b\\[37;41m\\x1b\\[2K)?(.+)/m', $output, $matches)) { $this->notification->name = 'Red'; $this->notification->description = $matches[1] . "\n" . $matches[2]; } elseif (preg_match('/^(?:\\x1b\\[30;43m\\x1b\\[2K)?(OK, but incomplete or skipped tests!)\\s^(?:\\x1b\\[0m\\x1b\\[30;43m\\x1b\\[2K)?(.+)/m', $output, $matches)) { $this->notification->name = 'Red'; $this->notification->description = $matches[1] . "\n" . $matches[2]; } } }
/** * Runs tests based on the given PHPUnit_Framework_TestSuite object. * * @param PHPUnit_Framework_TestSuite $suite */ public function run($suite) { $testResult = new PHPUnit_Framework_TestResult(); $printer = new Stagehand_TestRunner_Runner_PHPUnitRunner_Printer_ResultPrinter(null, false, $this->config->colors); $arguments = array(); $arguments['printer'] = $printer; Stagehand_TestRunner_Runner_PHPUnitRunner_TestDox_Stream::register(); $arguments['listeners'] = array(new Stagehand_TestRunner_Runner_PHPUnitRunner_Printer_TestDoxPrinter('testdox://' . spl_object_hash($testResult), $this->config->colors, $this->prettifier())); if (!$this->config->printsDetailedProgressReport) { $arguments['listeners'][] = new Stagehand_TestRunner_Runner_PHPUnitRunner_Printer_ProgressPrinter(null, false, $this->config->colors); } else { $arguments['listeners'][] = new Stagehand_TestRunner_Runner_PHPUnitRunner_Printer_DetailedProgressPrinter(null, false, $this->config->colors); } if ($this->config->logsResultsInJUnitXML) { $junitXMLListener = new Stagehand_TestRunner_Runner_PHPUnitRunner_Printer_JUnitXMLPrinter($this->config->junitXMLFile); if (!$this->config->logsResultsInJUnitXMLInRealtime) { $xmlWriter = new Stagehand_TestRunner_JUnitXMLWriter_JUnitXMLDOMWriter(array($junitXMLListener, 'write')); } else { $xmlWriter = $this->junitXMLStreamWriter(array($junitXMLListener, 'write')); } $junitXMLListener->setXMLWriter($xmlWriter); $arguments['listeners'][] = $junitXMLListener; } if ($this->config->stopsOnFailure) { $arguments['stopOnFailure'] = true; $arguments['stopOnError'] = true; } $testRunner = new Stagehand_TestRunner_Runner_PHPUnitRunner_TestRunner(); $testRunner->setTestResult($testResult); $testRunner->doRun($suite, $arguments); if ($this->config->usesGrowl) { ob_start(); $printer->printResult($testResult); $output = ob_get_contents(); ob_end_clean(); if (preg_match('/^(?:\\x1b\\[3[23]m)?(OK[^\\x1b]+)/ms', $output, $matches)) { $this->notification->name = 'Green'; $this->notification->description = $matches[1]; } elseif (preg_match('/^(FAILURES!\\s)(?:\\x1b\\[31m)?([^\\x1b]+)/ms', $output, $matches)) { $this->notification->name = 'Red'; $this->notification->description = "{$matches[1]}{$matches[2]}"; } } }