Exemple #1
0
 protected function makePackageElement(\DOMDocument $document, score\coverage $coverage)
 {
     $package = $document->createElement('package');
     $package->setAttribute('name', $this->getPackage());
     foreach ($coverage->getClasses() as $class => $file) {
         $package->appendChild($this->makeFileElement($document, $file, $class, $coverage->getCoverageForClass($class)));
     }
     $package->appendChild($this->makePackageMetricsElement($document, sizeof($coverage->getClasses())));
     return $package;
 }
Exemple #2
0
 public function testGetCoverageForMethod()
 {
     $this->if($coverage = new testedClass())->then->array($coverage->getCoverageForClass(uniqid()))->isEmpty()->if($classController = new mock\controller())->and($classController->disableMethodChecking())->and($classController->__construct = function () {
     })->and($classController->getName = function () use(&$className) {
         return $className;
     })->and($classController->getFileName = function () use(&$classFile) {
         return $classFile;
     })->and($classController->getTraits = array())->and($classController->getStartLine = 1)->and($classController->getEndLine = 12)->and($class = new \mock\reflectionClass(uniqid(), $classController))->and($methodController = new mock\controller())->and($methodController->__construct = function () {
     })->and($methodController->getName = function () use(&$methodName) {
         return $methodName;
     })->and($methodController->isAbstract = false)->and($methodController->getFileName = function () use(&$classFile) {
         return $classFile;
     })->and($methodController->getDeclaringClass = function () use($class) {
         return $class;
     })->and($methodController->getStartLine = 4)->and($methodController->getEndLine = 8)->and($classController->getMethods = array(new \mock\reflectionMethod(uniqid(), uniqid(), $methodController)))->and($classFile = uniqid())->and($className = uniqid())->and($methodName = uniqid())->and($xdebugData = array($classFile => array(3 => -2, 4 => 1, 5 => -1, 6 => -1, 7 => -1, 8 => -2, 9 => -1), uniqid() => array(5 => 2, 6 => 3, 7 => 4, 8 => 3, 9 => 2)))->and($expected = array(4 => 1, 5 => -1, 6 => -1, 7 => -1, 8 => -2))->and($coverage = new testedClass())->and($coverage->setReflectionClassFactory(function () use($class) {
         return $class;
     }))->and($coverage->addXdebugDataForTest($this, $xdebugData))->then->array($coverage->getCoverageForMethod($className, $methodName))->isEqualTo($expected);
 }
Exemple #3
0
 /**
  * @param Coverage $coverage
  *
  * @return array
  */
 protected function getCoverageReport(Coverage $coverage)
 {
     $sources = [];
     $directoriesCoverage = [];
     foreach ($coverage->getClasses() as $class => $file) {
         $path = new Path($file);
         $source = $this->getSourceCode($path);
         $fileName = $this->getFileName($path);
         $hierarchy = $this->getHierarchy($fileName);
         $linesCoverage = $this->getLinesCoverage($coverage->getCoverageForClass($class));
         foreach ($hierarchy as $item) {
             $itemPath = $item['path'];
             $itemName = $item['name'];
             $itemType = $item['type'];
             if (isset($directoriesCoverage[$itemPath])) {
                 $directoriesCoverage[$itemPath]['relevantLines'] += $linesCoverage['relevantLines'];
                 $directoriesCoverage[$itemPath]['coveredLines'] += $linesCoverage['coveredLines'];
                 $directoriesCoverage[$itemPath]['totalLines'] += count($linesCoverage['lines']);
             } else {
                 $directoriesCoverage[$itemPath] = ['directories' => [], 'files' => [], 'relevantLines' => $linesCoverage['relevantLines'], 'coveredLines' => $linesCoverage['coveredLines'], 'totalLines' => count($linesCoverage['lines'])];
             }
             if ($itemType == 'directory') {
                 $directoriesCoverage[$itemPath]['directories'][$itemName] = ['relevantLines' => 0, 'coveredLines' => 0, 'totalLines' => 0];
             } else {
                 $calculatedCoverage = 1;
                 if ($linesCoverage['relevantLines'] > 0) {
                     $calculatedCoverage = (double) ($linesCoverage['coveredLines'] / $linesCoverage['relevantLines']);
                 }
                 $directoriesCoverage[$itemPath]['files'][$itemName] = ['relevantLines' => $linesCoverage['relevantLines'], 'coveredLines' => $linesCoverage['coveredLines'], 'totalLines' => count($linesCoverage['lines']), 'coverage' => $calculatedCoverage];
             }
         }
         foreach ($directoriesCoverage as $path => &$directoryCoverageItem) {
             $calculatedCoverage = 1;
             if ($directoryCoverageItem['relevantLines'] > 0) {
                 $calculatedCoverage = (double) ($directoryCoverageItem['coveredLines'] / $directoryCoverageItem['relevantLines']);
             }
             $directoryCoverageItem['coverage'] = $calculatedCoverage;
             foreach ($directoryCoverageItem['directories'] as $directoryName => &$directoryCoverage) {
                 $directoryCoverage['relevantLines'] = $directoriesCoverage[$path . $directoryName . '/']['relevantLines'];
                 $directoryCoverage['coveredLines'] = $directoriesCoverage[$path . $directoryName . '/']['coveredLines'];
                 $directoryCoverage['totalLines'] = $directoriesCoverage[$path . $directoryName . '/']['totalLines'];
                 $calculatedCoverage = 1;
                 if ($directoryCoverage['relevantLines'] > 0) {
                     $calculatedCoverage = (double) ($directoryCoverage['coveredLines'] / $directoryCoverage['relevantLines']);
                 }
                 $directoryCoverage['coverage'] = $calculatedCoverage;
             }
         }
         $sources[] = ['name' => $fileName, 'className' => str_replace(array('.php', '/'), array('', '\\'), $fileName), 'source' => $source, 'coverage' => $linesCoverage];
     }
     return ['sources' => $sources, 'directories' => $directoriesCoverage, 'relevantLines' => $directoriesCoverage['/']['relevantLines'], 'coveredLines' => $directoriesCoverage['/']['coveredLines']];
 }
Exemple #4
0
 protected function makeSourceElement(score\coverage $coverage)
 {
     $sources = array();
     foreach ($coverage->getClasses() as $class => $file) {
         $path = new atoum\fs\path($file);
         $source = $this->adapter->file_get_contents((string) $path->resolve());
         $sources[] = array('name' => ltrim((string) $path->relativizeFrom($this->sourceDir), '.' . DIRECTORY_SEPARATOR), 'source' => $source, 'coverage' => $this->makeCoverageElement($coverage->getCoverageForClass($class)));
     }
     return $sources;
 }