getPackageInformation() public static method

Returns the package information of a user-defined class.
public static getPackageInformation ( string $className, string $docComment ) : array
$className string
$docComment string
return array
Example #1
0
 /**
  * Constructor.
  *
  * @param  ReflectionClass $class
  * @param  array           $codeCoverage
  */
 protected function __construct(ReflectionClass $class, &$codeCoverage = array())
 {
     $this->class = $class;
     $className = $class->getName();
     $packageInformation = PHPUnit_Util_Class::getPackageInformation($className);
     if (!empty($packageInformation['fullPackage'])) {
         $this->package = $packageInformation['fullPackage'];
     }
     $this->setCoverage($codeCoverage);
     $this->dit = count(PHPUnit_Util_Class::getHierarchy($class->getName())) - 1;
     $this->impl = count($class->getInterfaces());
     foreach ($this->class->getMethods() as $method) {
         if ($method->getDeclaringClass()->getName() == $className) {
             $this->methods[$method->getName()] = PHPUnit_Util_Metrics_Function::factory($method, $codeCoverage);
         } else {
             $this->inheritedMethods[$method->getName()] = PHPUnit_Util_Metrics_Function::factory($method, $codeCoverage);
         }
     }
     $this->calculateAttributeMetrics();
     $this->calculateMethodMetrics();
     $this->calculateNumberOfChildren();
     $this->calculatePolymorphismFactor();
     $this->calculateDependencies();
 }
Example #2
0
 /**
  * A testsuite started.
  *
  * @param  PHPUnit_Framework_TestSuite $suite
  * @since  Method available since Release 2.2.0
  */
 public function startTestSuite(PHPUnit_Framework_TestSuite $suite)
 {
     $testSuite = $this->document->createElement('testsuite');
     $testSuite->setAttribute('name', $suite->getName());
     if (class_exists($suite->getName(), FALSE)) {
         try {
             $class = new ReflectionClass($suite->getName());
             $testSuite->setAttribute('file', $class->getFileName());
             $packageInformation = PHPUnit_Util_Class::getPackageInformation($suite->getName(), $class->getDocComment());
             if (!empty($packageInformation['namespace'])) {
                 $testSuite->setAttribute('namespace', $packageInformation['namespace']);
             }
             if (!empty($packageInformation['fullPackage'])) {
                 $testSuite->setAttribute('fullPackage', $packageInformation['fullPackage']);
             }
             if (!empty($packageInformation['category'])) {
                 $testSuite->setAttribute('category', $packageInformation['category']);
             }
             if (!empty($packageInformation['package'])) {
                 $testSuite->setAttribute('package', $packageInformation['package']);
             }
             if (!empty($packageInformation['subpackage'])) {
                 $testSuite->setAttribute('subpackage', $packageInformation['subpackage']);
             }
         } catch (ReflectionException $e) {
         }
     }
     if ($this->testSuiteLevel > 0) {
         $this->testSuites[$this->testSuiteLevel]->appendChild($testSuite);
     } else {
         $this->root->appendChild($testSuite);
     }
     $this->testSuiteLevel++;
     $this->testSuites[$this->testSuiteLevel] = $testSuite;
     $this->testSuiteTests[$this->testSuiteLevel] = 0;
     $this->testSuiteAssertions[$this->testSuiteLevel] = 0;
     $this->testSuiteErrors[$this->testSuiteLevel] = 0;
     $this->testSuiteFailures[$this->testSuiteLevel] = 0;
     $this->testSuiteTimes[$this->testSuiteLevel] = 0;
 }
Example #3
0
 /**
  * @param  PHPUnit_Framework_TestResult $result
  * @todo   Count conditionals.
  */
 public function process(PHPUnit_Framework_TestResult $result)
 {
     $time = time();
     $document = new DOMDocument('1.0', 'UTF-8');
     $document->formatOutput = TRUE;
     $coverage = $document->createElement('coverage');
     $coverage->setAttribute('generated', $time);
     $coverage->setAttribute('phpunit', PHPUnit_Runner_Version::id());
     $document->appendChild($coverage);
     $project = $document->createElement('project');
     $project->setAttribute('name', $result->topTestSuite()->getName());
     $project->setAttribute('timestamp', $time);
     $coverage->appendChild($project);
     $codeCoverageInformation = $result->getCodeCoverageInformation();
     $files = PHPUnit_Util_CodeCoverage::getSummary($codeCoverageInformation);
     $packages = array();
     $projectFiles = 0;
     $projectLoc = 0;
     $projectNcloc = 0;
     $projectClasses = 0;
     $projectMethods = 0;
     $projectCoveredMethods = 0;
     $projectConditionals = 0;
     $projectCoveredConditionals = 0;
     $projectStatements = 0;
     $projectCoveredStatements = 0;
     foreach ($files as $filename => $data) {
         $projectFiles++;
         $fileClasses = 0;
         $fileConditionals = 0;
         $fileCoveredConditionals = 0;
         $fileStatements = 0;
         $fileCoveredStatements = 0;
         $fileMethods = 0;
         $fileCoveredMethods = 0;
         $file = $document->createElement('file');
         $file->setAttribute('name', $filename);
         $namespace = 'global';
         $classes = PHPUnit_Util_Class::getClassesInFile($filename);
         $lines = array();
         foreach ($classes as $class) {
             if ($class->isInterface()) {
                 continue;
             }
             $className = $class->getName();
             $methods = $class->getMethods();
             $packageInformation = PHPUnit_Util_Class::getPackageInformation($className);
             $numMethods = 0;
             $fileClasses++;
             $projectClasses++;
             if (!empty($packageInformation['namespace'])) {
                 $namespace = $packageInformation['namespace'];
             }
             $classConditionals = 0;
             $classCoveredConditionals = 0;
             $classStatements = 0;
             $classCoveredStatements = 0;
             $classCoveredMethods = 0;
             foreach ($methods as $method) {
                 if ($method->getDeclaringClass()->getName() == $class->getName()) {
                     $startLine = $method->getStartLine();
                     $endLine = $method->getEndLine();
                     $tests = array();
                     for ($i = $startLine; $i <= $endLine; $i++) {
                         if (isset($files[$filename][$i])) {
                             if (is_array($files[$filename][$i])) {
                                 foreach ($files[$filename][$i] as $_test) {
                                     $add = TRUE;
                                     foreach ($tests as $test) {
                                         if ($test === $_test) {
                                             $add = FALSE;
                                             break;
                                         }
                                     }
                                     if ($add) {
                                         $tests[] = $_test;
                                     }
                                 }
                                 $classCoveredStatements++;
                             }
                             $classStatements++;
                         }
                     }
                     $count = count($tests);
                     $lines[$startLine] = array('count' => $count, 'type' => 'method');
                     if ($count > 0) {
                         $classCoveredMethods++;
                         $fileCoveredMethods++;
                         $projectCoveredMethods++;
                     }
                     $classStatements--;
                     $numMethods++;
                     $fileMethods++;
                     $projectMethods++;
                 }
             }
             $classXML = $document->createElement('class');
             $classXML->setAttribute('name', $className);
             $classXML->setAttribute('namespace', $namespace);
             if (!empty($packageInformation['fullPackage'])) {
                 $classXML->setAttribute('fullPackage', $packageInformation['fullPackage']);
             }
             if (!empty($packageInformation['category'])) {
                 $classXML->setAttribute('category', $packageInformation['category']);
             }
             if (!empty($packageInformation['package'])) {
                 $classXML->setAttribute('package', $packageInformation['package']);
             }
             if (!empty($packageInformation['subpackage'])) {
                 $classXML->setAttribute('subpackage', $packageInformation['subpackage']);
             }
             $file->appendChild($classXML);
             $classMetricsXML = $document->createElement('metrics');
             $classMetricsXML->setAttribute('methods', $numMethods);
             $classMetricsXML->setAttribute('coveredmethods', $classCoveredMethods);
             //$classMetricsXML->setAttribute('conditionals', $classConditionals);
             //$classMetricsXML->setAttribute('coveredconditionals', $classCoveredConditionals);
             $classMetricsXML->setAttribute('statements', $classStatements);
             $classMetricsXML->setAttribute('coveredstatements', $classCoveredStatements);
             $classMetricsXML->setAttribute('elements', $classConditionals + $classStatements + $numMethods);
             $classMetricsXML->setAttribute('coveredelements', $classCoveredConditionals + $classCoveredStatements + $classCoveredMethods);
             $classXML->appendChild($classMetricsXML);
         }
         foreach ($data as $_line => $_data) {
             if (is_array($_data)) {
                 $count = count($_data);
             } else {
                 if ($_data == -1) {
                     $count = 0;
                 } else {
                     if ($_data == -2) {
                         continue;
                     }
                 }
             }
             $lines[$_line] = array('count' => $count, 'type' => 'stmt');
         }
         ksort($lines);
         foreach ($lines as $_line => $_data) {
             $line = $document->createElement('line');
             $line->setAttribute('num', $_line);
             $line->setAttribute('type', $_data['type']);
             $line->setAttribute('count', $_data['count']);
             if ($_data['type'] == 'stmt') {
                 if ($_data['count'] != 0) {
                     $fileCoveredStatements++;
                 }
                 $fileStatements++;
             }
             $file->appendChild($line);
         }
         if (file_exists($filename)) {
             $fileMetrics = PHPUnit_Util_Metrics_File::factory($filename, $files);
             $fileLoc = $fileMetrics->getLoc();
             $fileNcloc = $fileMetrics->getNcloc();
             $fileMetricsXML = $document->createElement('metrics');
             $fileMetricsXML->setAttribute('loc', $fileLoc);
             $fileMetricsXML->setAttribute('ncloc', $fileNcloc);
             $fileMetricsXML->setAttribute('classes', $fileClasses);
             $fileMetricsXML->setAttribute('methods', $fileMethods);
             $fileMetricsXML->setAttribute('coveredmethods', $fileCoveredMethods);
             //$fileMetricsXML->setAttribute('conditionals', $fileConditionals);
             //$fileMetricsXML->setAttribute('coveredconditionals', $fileCoveredConditionals);
             $fileMetricsXML->setAttribute('statements', $fileStatements);
             $fileMetricsXML->setAttribute('coveredstatements', $fileCoveredStatements);
             $fileMetricsXML->setAttribute('elements', $fileConditionals + $fileStatements + $fileMethods);
             $fileMetricsXML->setAttribute('coveredelements', $fileCoveredConditionals + $fileCoveredStatements + $fileCoveredMethods);
             $file->appendChild($fileMetricsXML);
             if ($namespace == 'global') {
                 $project->appendChild($file);
             } else {
                 if (!isset($packages[$namespace])) {
                     $packages[$namespace] = $document->createElement('package');
                     $packages[$namespace]->setAttribute('name', $namespace);
                     $project->appendChild($packages[$namespace]);
                 }
                 $packages[$namespace]->appendChild($file);
             }
             $projectLoc += $fileLoc;
             $projectNcloc += $fileNcloc;
             $projectStatements += $fileStatements;
             $projectCoveredStatements += $fileCoveredStatements;
         }
     }
     $projectMetricsXML = $document->createElement('metrics');
     $projectMetricsXML->setAttribute('files', $projectFiles);
     $projectMetricsXML->setAttribute('loc', $projectLoc);
     $projectMetricsXML->setAttribute('ncloc', $projectNcloc);
     $projectMetricsXML->setAttribute('classes', $projectClasses);
     $projectMetricsXML->setAttribute('methods', $projectMethods);
     $projectMetricsXML->setAttribute('coveredmethods', $projectCoveredMethods);
     //$projectMetricsXML->setAttribute('conditionals', $projectConditionals);
     //$projectMetricsXML->setAttribute('coveredconditionals', $projectCoveredConditionals);
     $projectMetricsXML->setAttribute('statements', $projectStatements);
     $projectMetricsXML->setAttribute('coveredstatements', $projectCoveredStatements);
     $projectMetricsXML->setAttribute('elements', $projectConditionals + $projectStatements + $projectMethods);
     $projectMetricsXML->setAttribute('coveredelements', $projectCoveredConditionals + $projectCoveredStatements + $projectCoveredMethods);
     $project->appendChild($projectMetricsXML);
     $this->write($document->saveXML());
     $this->flush();
 }
Example #4
0
 /**
  * @param  PHPUnit_Framework_TestResult $result
  * @todo   Count conditionals.
  */
 public function process(PHPUnit_Framework_TestResult $result)
 {
     $time = time();
     $document = new DOMDocument('1.0', 'UTF-8');
     $document->formatOutput = TRUE;
     $coverage = $document->createElement('coverage');
     $coverage->setAttribute('generated', $time);
     $coverage->setAttribute('phpunit', PHPUnit_Runner_Version::id());
     $document->appendChild($coverage);
     $project = $document->createElement('project');
     $project->setAttribute('name', $result->topTestSuite()->getName());
     $project->setAttribute('timestamp', $time);
     $coverage->appendChild($project);
     $codeCoverageInformation = $result->getCodeCoverageInformation();
     $files = PHPUnit_Util_CodeCoverage::getSummary($codeCoverageInformation);
     $packages = array();
     $projectStatistics = array('files' => 0, 'loc' => 0, 'ncloc' => 0, 'classes' => 0, 'methods' => 0, 'coveredMethods' => 0, 'conditionals' => 0, 'coveredConditionals' => 0, 'statements' => 0, 'coveredStatements' => 0);
     foreach ($files as $filename => $data) {
         $namespace = 'global';
         if (file_exists($filename)) {
             $fileStatistics = array('classes' => 0, 'methods' => 0, 'coveredMethods' => 0, 'conditionals' => 0, 'coveredConditionals' => 0, 'statements' => 0, 'coveredStatements' => 0);
             $file = $document->createElement('file');
             $file->setAttribute('name', $filename);
             $classesInFile = PHPUnit_Util_File::getClassesInFile($filename);
             $lines = array();
             foreach ($classesInFile as $className => $_class) {
                 $classStatistics = array('methods' => 0, 'coveredMethods' => 0, 'conditionals' => 0, 'coveredConditionals' => 0, 'statements' => 0, 'coveredStatements' => 0);
                 foreach ($_class['methods'] as $methodName => $method) {
                     $classStatistics['methods']++;
                     $methodCount = 0;
                     for ($i = $method['startLine']; $i <= $method['endLine']; $i++) {
                         $add = TRUE;
                         $count = 0;
                         if (isset($files[$filename][$i])) {
                             if ($files[$filename][$i] != -2) {
                                 $classStatistics['statements']++;
                             }
                             if (is_array($files[$filename][$i])) {
                                 $classStatistics['coveredStatements']++;
                                 $count = count($files[$filename][$i]);
                             } else {
                                 if ($files[$filename][$i] == -2) {
                                     $add = FALSE;
                                 }
                             }
                         } else {
                             $add = FALSE;
                         }
                         $methodCount = max($methodCount, $count);
                         if ($add) {
                             $lines[$i] = array('count' => $count, 'type' => 'stmt');
                         }
                     }
                     if ($methodCount > 0) {
                         $classStatistics['coveredMethods']++;
                     }
                     $lines[$method['startLine']] = array('count' => $methodCount, 'type' => 'method', 'name' => $methodName);
                 }
                 $packageInformation = PHPUnit_Util_Class::getPackageInformation($className, $_class['docComment']);
                 if (!empty($packageInformation['namespace'])) {
                     $namespace = $packageInformation['namespace'];
                 }
                 $class = $document->createElement('class');
                 $class->setAttribute('name', $className);
                 $class->setAttribute('namespace', $namespace);
                 if (!empty($packageInformation['fullPackage'])) {
                     $class->setAttribute('fullPackage', $packageInformation['fullPackage']);
                 }
                 if (!empty($packageInformation['category'])) {
                     $class->setAttribute('category', $packageInformation['category']);
                 }
                 if (!empty($packageInformation['package'])) {
                     $class->setAttribute('package', $packageInformation['package']);
                 }
                 if (!empty($packageInformation['subpackage'])) {
                     $class->setAttribute('subpackage', $packageInformation['subpackage']);
                 }
                 $file->appendChild($class);
                 $metrics = $document->createElement('metrics');
                 $metrics->setAttribute('methods', $classStatistics['methods']);
                 $metrics->setAttribute('coveredmethods', $classStatistics['coveredMethods']);
                 //$metrics->setAttribute('conditionals', $classStatistics['conditionals']);
                 //$metrics->setAttribute('coveredconditionals', $classStatistics['coveredConditionals']);
                 $metrics->setAttribute('statements', $classStatistics['statements']);
                 $metrics->setAttribute('coveredstatements', $classStatistics['coveredStatements']);
                 $metrics->setAttribute('elements', $classStatistics['conditionals'] + $classStatistics['statements'] + $classStatistics['methods']);
                 $metrics->setAttribute('coveredelements', $classStatistics['coveredConditionals'] + $classStatistics['coveredStatements'] + $classStatistics['coveredMethods']);
                 $class->appendChild($metrics);
                 $fileStatistics['methods'] += $classStatistics['methods'];
                 $fileStatistics['coveredMethods'] += $classStatistics['coveredMethods'];
                 $fileStatistics['conditionals'] += $classStatistics['conditionals'];
                 $fileStatistics['coveredConditionals'] += $classStatistics['coveredConditionals'];
                 $fileStatistics['statements'] += $classStatistics['statements'];
                 $fileStatistics['coveredStatements'] += $classStatistics['coveredStatements'];
                 $fileStatistics['classes']++;
             }
             foreach ($data as $_line => $_data) {
                 if (isset($lines[$_line])) {
                     continue;
                 }
                 if ($_data != -2) {
                     $fileStatistics['statements']++;
                     if (is_array($_data)) {
                         $count = count($_data);
                         $fileStatistics['coveredStatements']++;
                     } else {
                         $count = 0;
                     }
                     $lines[$_line] = array('count' => $count, 'type' => 'stmt');
                 }
             }
             ksort($lines);
             foreach ($lines as $_line => $_data) {
                 $line = $document->createElement('line');
                 $line->setAttribute('num', $_line);
                 $line->setAttribute('type', $_data['type']);
                 if (isset($_data['name'])) {
                     $line->setAttribute('name', $_data['name']);
                 }
                 $line->setAttribute('count', $_data['count']);
                 $file->appendChild($line);
             }
             $count = PHPUnit_Util_File::countLines($filename);
             $metrics = $document->createElement('metrics');
             $metrics->setAttribute('loc', $count['loc']);
             $metrics->setAttribute('ncloc', $count['ncloc']);
             $metrics->setAttribute('classes', $fileStatistics['classes']);
             $metrics->setAttribute('methods', $fileStatistics['methods']);
             $metrics->setAttribute('coveredmethods', $fileStatistics['coveredMethods']);
             //$metrics->setAttribute('conditionals', $fileStatistics['conditionals']);
             //$metrics->setAttribute('coveredconditionals', $fileStatistics['coveredConditionals']);
             $metrics->setAttribute('statements', $fileStatistics['statements']);
             $metrics->setAttribute('coveredstatements', $fileStatistics['coveredStatements']);
             $metrics->setAttribute('elements', $fileStatistics['conditionals'] + $fileStatistics['statements'] + $fileStatistics['methods']);
             $metrics->setAttribute('coveredelements', $fileStatistics['coveredConditionals'] + $fileStatistics['coveredStatements'] + $fileStatistics['coveredMethods']);
             $file->appendChild($metrics);
             if ($namespace == 'global') {
                 $project->appendChild($file);
             } else {
                 if (!isset($packages[$namespace])) {
                     $packages[$namespace] = $document->createElement('package');
                     $packages[$namespace]->setAttribute('name', $namespace);
                     $project->appendChild($packages[$namespace]);
                 }
                 $packages[$namespace]->appendChild($file);
             }
             $projectStatistics['loc'] += $count['loc'];
             $projectStatistics['ncloc'] += $count['ncloc'];
             $projectStatistics['classes'] += $fileStatistics['classes'];
             $projectStatistics['methods'] += $fileStatistics['methods'];
             $projectStatistics['coveredMethods'] += $fileStatistics['coveredMethods'];
             $projectStatistics['conditionals'] += $fileStatistics['conditionals'];
             $projectStatistics['coveredConditionals'] += $fileStatistics['coveredConditionals'];
             $projectStatistics['statements'] += $fileStatistics['statements'];
             $projectStatistics['coveredStatements'] += $fileStatistics['coveredStatements'];
             $projectStatistics['files']++;
         }
     }
     $metrics = $document->createElement('metrics');
     $metrics->setAttribute('files', $projectStatistics['files']);
     $metrics->setAttribute('loc', $projectStatistics['loc']);
     $metrics->setAttribute('ncloc', $projectStatistics['ncloc']);
     $metrics->setAttribute('classes', $projectStatistics['classes']);
     $metrics->setAttribute('methods', $projectStatistics['methods']);
     $metrics->setAttribute('coveredmethods', $projectStatistics['coveredMethods']);
     //$metrics->setAttribute('conditionals', $projectStatistics['conditionals']);
     //$metrics->setAttribute('coveredconditionals', $projectStatistics['coveredConditionals']);
     $metrics->setAttribute('statements', $projectStatistics['statements']);
     $metrics->setAttribute('coveredstatements', $projectStatistics['coveredStatements']);
     $metrics->setAttribute('elements', $projectStatistics['conditionals'] + $projectStatistics['statements'] + $projectStatistics['methods']);
     $metrics->setAttribute('coveredelements', $projectStatistics['coveredConditionals'] + $projectStatistics['coveredStatements'] + $projectStatistics['coveredMethods']);
     $project->appendChild($metrics);
     $this->write($document->saveXML());
     $this->flush();
 }