/** * Runs the tests suite according to Runner set options and the execution * order of test case (if any). It then returns an array of two elements. * First element is a boolean result value indicating if tests passed or not. * Second element is an array containing the key "stdout" which stores the * output from the last test run. * * @param \Mutagenesis\Runner\RunnerAbstract $baseRunner * @param bool $useStdout * @param bool $firstRun * @param array $mutation * @param array $testCases * @return array */ public function runTests(\Mutagenesis\Runner\Base $runner, $useStdout = true, $firstRun = false, array $mutation = array(), array $testCases = array()) { $options = $runner->getOptions(); $job = new \Mutagenesis\Utility\Job(); if (!$useStdout) { array_unshift($options['clioptions'], '--stderr'); } if (!in_array('--stop-on-failure', $options['clioptions'])) { array_unshift($options['clioptions'], '--stop-on-failure'); } array_unshift($options['clioptions'], 'phpunit'); if ($firstRun) { $options['clioptions'] = array_merge($options['clioptions'], array('--log-junit', $options['cache'] . '/mutagenesis.xml'), explode(' ', $options['constraint'])); } if (count($testCases) > 0) { // tests cases always 0 on first run foreach ($testCases as $case) { $args = $options; $args['clioptions'][] = $case['class']; $args['clioptions'][] = $case['file']; $output = self::execute($job->generate($mutation, $args, $runner->getTimeout(), $runner->getBootstrap())); if (!$this->processOutput($output['stdout'])) { return array(false, $output); } } } else { $output = self::execute($job->generate($mutation, $options, 0, $runner->getBootstrap())); if (!$this->processOutput($output['stdout'])) { return array(false, $output); } } return array(true, $output); }
public function testGenerateReturnsPHPScriptRenderedWithCurrentRunnersSettingsAndSerialisedMutationArray() { $job = new \Mutagenesis\Utility\Job(); $script = $job->generate(array('a', '1', new stdClass())); $expected = <<<EXPECTED <?php namespace MutagenesisEnv; declare(ticks = 1); require_once 'PHPUnit/Autoload.php'; require_once 'Mutagenesis/Loader.php'; \$loader = new \\Mutagenesis\\Loader; \$loader->register(); class Job { static function main () { \\Mutagenesis\\Adapter\\Phpunit::main( "a:0:{}", "a:3:{i:0;s:1:\\"a\\";i:1;s:1:\\"1\\";i:2;O:8:\\"stdClass\\":0:{}}", null ); } static function timeout() { throw new \\Exception('Timed Out'); } } pcntl_signal(SIGALRM, array('\\MutagenesisEnv\\Job', 'timeout'), TRUE); pcntl_alarm(60); try { Job::main(); } catch (\\Exception \$e) { pcntl_alarm(0); throw \$e; } pcntl_alarm(0); EXPECTED; $this->assertEquals($expected, $script); }