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);
}