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 test__toString()
 {
     $this->if($scoreCoverage = new score\coverage())->and($score = new \mock\mageekguy\atoum\runner\score())->and($score->getMockController()->getCoverage = function () use($scoreCoverage) {
         return $scoreCoverage;
     })->and($runner = new atoum\runner())->and($runner->setScore($score))->and($defaultField = new testedClass())->and($customField = new testedClass())->and($customField->setTitlePrompt($titlePrompt = new prompt(uniqid())))->and($customField->setClassPrompt($classPrompt = new prompt(uniqid())))->and($customField->setMethodPrompt($methodPrompt = new prompt(uniqid())))->and($customField->setTitleColorizer($titleColorizer = new colorizer(uniqid(), uniqid())))->and($customField->setCoverageColorizer($coverageColorizer = new colorizer(uniqid(), uniqid())))->and($customField->setLocale($locale = new locale()))->then->castToString($defaultField)->isEmpty()->castToString($customField)->isEmpty()->if($defaultField->handleEvent(atoum\runner::runStart, $runner))->and($customField->handleEvent(atoum\runner::runStart, $runner))->then->castToString($defaultField)->isEmpty()->castToString($customField)->isEmpty()->if($defaultField->handleEvent(atoum\runner::runStop, $runner))->and($customField->handleEvent(atoum\runner::runStop, $runner))->then->castToString($defaultField)->isEmpty()->castToString($customField)->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->isAbstract = false)->and($methodController->getFileName = function () use(&$classFile) {
         return $classFile;
     })->and($methodController->getDeclaringClass = $class)->and($methodController->getName = function () use(&$methodName) {
         return $methodName;
     })->and($methodController->getStartLine = 6)->and($methodController->getEndLine = 8)->and($classController->getMethods = array(new \mock\reflectionMethod(uniqid(), uniqid(), $methodController)))->and($className = uniqid())->and($methodName = uniqid())->and($scoreCoverage->setReflectionClassFactory(function () use($class) {
         return $class;
     }))->and($scoreCoverage->addXdebugDataForTest($this, $xdebugData = array($classFile = uniqid() => array(5 => 1, 6 => 2, 7 => 3, 8 => 2, 9 => 1), uniqid() => array(5 => 2, 6 => 3, 7 => 4, 8 => 3, 9 => 2))))->and($defaultField = new testedClass())->and($customField = new testedClass())->and($customField->setTitlePrompt($titlePrompt = new prompt(uniqid())))->and($customField->setClassPrompt($classPrompt = new prompt(uniqid())))->and($customField->setMethodPrompt($methodPrompt = new prompt(uniqid())))->and($customField->setTitleColorizer($titleColorizer = new colorizer(uniqid(), uniqid())))->and($customField->setCoverageColorizer($coverageColorizer = new colorizer(uniqid(), uniqid())))->and($customField->setLocale($locale = new locale()))->then->castToString($defaultField)->isEmpty()->castToString($customField)->isEmpty()->if($defaultField->handleEvent(atoum\runner::runStart, $runner))->and($customField->handleEvent(atoum\runner::runStart, $runner))->then->castToString($defaultField)->isEmpty()->castToString($customField)->isEmpty()->if($defaultField->handleEvent(atoum\runner::runStop, $runner))->and($customField->handleEvent(atoum\runner::runStop, $runner))->then->castToString($defaultField)->isEqualTo($defaultField->getTitlePrompt() . sprintf($defaultField->getLocale()->_('Code coverage value : %3.2f%%'), $scoreCoverage->getValue() * 100) . PHP_EOL . $defaultField->getClassPrompt() . sprintf($defaultField->getLocale()->_('Class %s: %3.2f%%'), $className, $scoreCoverage->getValueForClass($className) * 100.0) . PHP_EOL . $defaultField->getMethodPrompt() . sprintf($defaultField->getLocale()->_('     ::%s(): %3.2f%%'), $methodName, $scoreCoverage->getValueForMethod($className, $methodName) * 100.0) . PHP_EOL)->castToString($customField)->isEqualTo($titlePrompt . sprintf($locale->_('%s : %s'), $titleColorizer->colorize($locale->_('Code coverage value')), $coverageColorizer->colorize(sprintf('%3.2f%%', $scoreCoverage->getValue() * 100.0))) . PHP_EOL . $classPrompt . sprintf($locale->_('%s: %s'), $titleColorizer->colorize(sprintf($locale->_('Class %s'), $className)), $coverageColorizer->colorize(sprintf('%3.2f%%', $scoreCoverage->getValueForClass($className) * 100.0))) . PHP_EOL . $methodPrompt . sprintf($locale->_('%s: %s'), $titleColorizer->colorize(sprintf($locale->_('     ::%s()'), $methodName)), $coverageColorizer->colorize(sprintf('%3.2f%%', $scoreCoverage->getValueForClass($className, $methodName) * 100.0))) . PHP_EOL);
 }
Exemple #3
0
 public function testIsInExcludedDirectories()
 {
     $this->if($coverage = new testedClass())->then->boolean($coverage->isInExcludedDirectories(uniqid()))->isFalse()->if($coverage->excludeDirectory($directory = uniqid()))->then->boolean($coverage->isInExcludedDirectories(uniqid()))->isFalse()->boolean($coverage->isInExcludedDirectories($directory . DIRECTORY_SEPARATOR . uniqid()))->isTrue()->boolean($coverage->isInExcludedDirectories($directory . uniqid() . DIRECTORY_SEPARATOR . uniqid()))->isFalse();
 }
Exemple #4
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 #5
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;
 }
Exemple #6
0
 public function merge(score\coverage $coverage)
 {
     $paths = $coverage->getPaths();
     $branches = $coverage->getBranches();
     $classes = $coverage->getClasses();
     $methods = $coverage->getMethods();
     foreach ($methods as $class => $methods) {
         $reflectedClass = call_user_func($this->reflectionClassFactory, $class);
         if ($this->isExcluded($reflectedClass) === false) {
             if (isset($this->classes[$class]) === false) {
                 $this->classes[$class] = $classes[$class];
             }
             if (isset($paths[$class]) && isset($this->paths[$class]) === false) {
                 $this->paths[$class] = $paths[$class];
             }
             if (isset($branches[$class]) && isset($this->branches[$class]) === false) {
                 $this->branches[$class] = $branches[$class];
             }
             foreach ($methods as $method => $lines) {
                 if (isset($paths[$class]) === true) {
                     if (isset($this->paths[$class][$method]) === false) {
                         $this->paths[$class][$method] = $paths[$class][$method];
                     }
                     foreach ($paths[$class][$method] as $index => $path) {
                         if ($this->paths[$class][$method][$index]['hit'] < $path['hit']) {
                             $this->paths[$class][$method][$index]['hit'] = $path['hit'];
                         }
                     }
                 }
                 if (isset($branches[$class]) === true) {
                     if (isset($this->branches[$class][$method]) === false) {
                         $this->branches[$class][$method] = $branches[$class][$method];
                     }
                     foreach ($branches[$class][$method] as $index => $branch) {
                         if ($this->branches[$class][$method][$index]['hit'] < $branch['hit']) {
                             $this->branches[$class][$method][$index]['hit'] = $branch['hit'];
                         }
                         foreach ($branch['out'] as $outIndex => $outOp) {
                             if (isset($this->branches[$class][$method][$index]['out'][$outIndex]) === false) {
                                 $this->branches[$class][$method][$index]['out'][$outIndex] = $outOp;
                             }
                         }
                         foreach ($branch['out_hit'] as $outIndex => $hit) {
                             if (isset($this->branches[$class][$method][$index]['out_hit'][$outIndex]) === false) {
                                 $this->branches[$class][$method][$index]['out_hit'][$outIndex] = $hit;
                             } else {
                                 if ($this->branches[$class][$method][$index]['out_hit'][$outIndex] < $hit) {
                                     $this->branches[$class][$method][$index]['out_hit'][$outIndex] = $hit;
                                 }
                             }
                         }
                     }
                 }
                 if (isset($this->methods[$class][$method]) === true || $this->isExcluded($this->getDeclaringClass($reflectedClass->getMethod($method))) === false) {
                     foreach ($lines as $line => $call) {
                         if (isset($this->methods[$class][$method][$line]) === false || $this->methods[$class][$method][$line] < $call) {
                             $this->methods[$class][$method][$line] = $call;
                         }
                     }
                 }
             }
         }
     }
     return $this;
 }
 public function merge(score\coverage $coverage)
 {
     $classes = $coverage->getClasses();
     $methods = $coverage->getMethods();
     foreach ($methods as $class => $methods) {
         $reflectedClass = call_user_func($this->reflectionClassFactory, $class);
         if ($this->isExcluded($reflectedClass) === false) {
             if (isset($this->classes[$class]) === false) {
                 $this->classes[$class] = $classes[$class];
             }
             foreach ($methods as $method => $lines) {
                 if (isset($this->methods[$class][$method]) === true || $this->isExcluded($this->getDeclaringClass($reflectedClass->getMethod($method))) === false) {
                     foreach ($lines as $line => $call) {
                         if (isset($this->methods[$class][$method][$line]) === false || $this->methods[$class][$method][$line] < $call) {
                             $this->methods[$class][$method][$line] = $call;
                         }
                     }
                 }
             }
         }
     }
     return $this;
 }