예제 #1
0
 private function runCache(IncrementalCache $cache, CoverageData $coverage, Collector $collector, $mutableFile, $index)
 {
     static $fileHits = [];
     static $cacheHits = [];
     if (in_array($mutableFile, $cacheHits)) {
         return true;
     } elseif (in_array($mutableFile, $fileHits)) {
         return false;
     }
     $fileHits[] = $mutableFile;
     $testFilesHaveChanged = $cache->hasModifiedTestFiles($coverage, $mutableFile);
     $sourceFilesHaveChanged = $cache->hasModifiedSourceFiles($mutableFile);
     if ($cache->hasResultsFor($mutableFile) && $testFilesHaveChanged === false && $sourceFilesHaveChanged === false) {
         $resultSet = $cache->getResultsFor($mutableFile);
         foreach ($resultSet as $result) {
             if ($result['isShadow'] === false) {
                 $resultObject = unserialize($result['result']);
                 $collector->collect($resultObject);
                 $this->onMutantDone($resultObject, $index);
             } else {
                 $mutantObject = unserialize($result['result']);
                 $collector->collectShadow($mutantObject);
                 $this->onShadowMutant($index);
             }
         }
         $cacheHits[] = $mutableFile;
         return true;
     }
     return false;
 }