Exemplo n.º 1
0
 /**
  * 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   Container         $container
  * @param   bool              $firstRun
  * @param   null|string       $interceptFile
  * @param   null|string       $mutantFile
  * @param   array             $testSuites
  * @return  Process
  */
 public function getProcess(Container $container, $firstRun = false, $interceptFile = null, $mutantFile = null, array $testSuites = [])
 {
     $jobopts = ['testdir' => $container->getTestRunDirectory(), 'basedir' => $container->getBaseDirectory(), 'timeout' => $container->getTimeout(), 'cachedir' => $container->getTempDirectory(), 'command' => $container->getAdapterOptions(), 'constraints' => $container->getAdapterConstraints()];
     /**
      * We like standardised easy to parse outout
      */
     array_unshift($jobopts['command'], '--tap');
     /*
      * We only need a single fail!
      */
     if (!in_array('--stop-on-failure', $jobopts['command'])) {
         array_unshift($jobopts['command'], '--stop-on-failure');
     }
     /**
      * Setup a PHPUnit XML config file for the purposes of explicitly setting
      * test case order (this will preserve anything else from the original)
      *
      * On first runs we log to junit XML so we can sort tests by performance.
      *
      * TODO: Assemble config just once if no coverage data available!
      */
     $xmlConfiguration = $this->assembleXmlConfiguration($container, $firstRun, $testSuites);
     $configFile = $container->getTempDirectory() . '/phpunit.humbug.xml';
     file_put_contents($configFile, $xmlConfiguration->generateXML());
     foreach ($jobopts['command'] as $key => $value) {
         if ($value == '--configuration' || $value == '-C') {
             unset($jobopts['command'][$key]);
             unset($jobopts['command'][$key + 1]);
         } elseif (preg_match('%\\-\\-configuration=%', $value)) {
             unset($jobopts['command'][$key]);
         }
     }
     array_unshift($jobopts['command'], '--configuration=' . $configFile);
     /**
      * Initial command is expected, of course.
      */
     $phpunitFinder = new PhpunitExecutableFinder();
     $command = $phpunitFinder->find();
     array_unshift($jobopts['command'], $command);
     /**
      * Log the first run so we can analyse test times to make future
      * runs more efficient in terms of deferring slow test classes to last
      */
     $timeout = 0;
     if ($firstRun) {
         $jobopts['command'] = array_merge($jobopts['command'], explode(' ', $jobopts['constraints']));
     } else {
         $timeout = $container->getTimeout();
     }
     Job::generate($mutantFile, $container->getBootstrap(), $interceptFile);
     $process = new Process(implode(' ', $jobopts['command']), $jobopts['testdir'], array_replace($_ENV, $_SERVER));
     $process->setTimeout($timeout);
     return $process;
 }