PageRenderTime 42ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/vendor/phpunit/php-code-coverage/src/CodeCoverage/Report/Clover.php

https://gitlab.com/pthapa81/MeroSaaman-1.0
PHP | 290 lines | 219 code | 40 blank | 31 comment | 25 complexity | fcd8d26fe9b3404c5feb28120aa33de7 MD5 | raw file
  1. <?php
  2. /*
  3. * This file is part of the PHP_CodeCoverage package.
  4. *
  5. * (c) Sebastian Bergmann <sebastian@phpunit.de>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. /**
  11. * Generates a Clover XML logfile from an PHP_CodeCoverage object.
  12. *
  13. * @category PHP
  14. * @package CodeCoverage
  15. * @author Sebastian Bergmann <sebastian@phpunit.de>
  16. * @copyright Sebastian Bergmann <sebastian@phpunit.de>
  17. * @license http://www.opensource.org/licenses/BSD-3-Clause The BSD 3-Clause License
  18. * @link http://github.com/sebastianbergmann/php-code-coverage
  19. * @since Class available since Release 1.0.0
  20. */
  21. class PHP_CodeCoverage_Report_Clover
  22. {
  23. /**
  24. * @param PHP_CodeCoverage $coverage
  25. * @param string $target
  26. * @param string $name
  27. * @return string
  28. */
  29. public function process(PHP_CodeCoverage $coverage, $target = null, $name = null)
  30. {
  31. $xmlDocument = new DOMDocument('1.0', 'UTF-8');
  32. $xmlDocument->formatOutput = true;
  33. $xmlCoverage = $xmlDocument->createElement('coverage');
  34. $xmlCoverage->setAttribute('generated', (int) $_SERVER['REQUEST_TIME']);
  35. $xmlDocument->appendChild($xmlCoverage);
  36. $xmlProject = $xmlDocument->createElement('project');
  37. $xmlProject->setAttribute('timestamp', (int) $_SERVER['REQUEST_TIME']);
  38. if (is_string($name)) {
  39. $xmlProject->setAttribute('name', $name);
  40. }
  41. $xmlCoverage->appendChild($xmlProject);
  42. $packages = array();
  43. $report = $coverage->getReport();
  44. unset($coverage);
  45. foreach ($report as $item) {
  46. $namespace = 'global';
  47. if (!$item instanceof PHP_CodeCoverage_Report_Node_File) {
  48. continue;
  49. }
  50. $xmlFile = $xmlDocument->createElement('file');
  51. $xmlFile->setAttribute('name', $item->getPath());
  52. $classes = $item->getClassesAndTraits();
  53. $coverage = $item->getCoverageData();
  54. $lines = array();
  55. foreach ($classes as $className => $class) {
  56. $classStatements = 0;
  57. $coveredClassStatements = 0;
  58. $coveredMethods = 0;
  59. $classMethods = 0;
  60. foreach ($class['methods'] as $methodName => $method) {
  61. if ($method['executableLines'] == 0) {
  62. continue;
  63. }
  64. $classMethods++;
  65. $classStatements += $method['executableLines'];
  66. $coveredClassStatements += $method['executedLines'];
  67. if ($method['coverage'] == 100) {
  68. $coveredMethods++;
  69. }
  70. $methodCount = 0;
  71. for ($i = $method['startLine'];
  72. $i <= $method['endLine'];
  73. $i++) {
  74. if (isset($coverage[$i]) && ($coverage[$i] !== null)) {
  75. $methodCount = max($methodCount, count($coverage[$i]));
  76. }
  77. }
  78. $lines[$method['startLine']] = array(
  79. 'count' => $methodCount,
  80. 'crap' => $method['crap'],
  81. 'type' => 'method',
  82. 'name' => $methodName
  83. );
  84. }
  85. if (!empty($class['package']['namespace'])) {
  86. $namespace = $class['package']['namespace'];
  87. }
  88. $xmlClass = $xmlDocument->createElement('class');
  89. $xmlClass->setAttribute('name', $className);
  90. $xmlClass->setAttribute('namespace', $namespace);
  91. if (!empty($class['package']['fullPackage'])) {
  92. $xmlClass->setAttribute(
  93. 'fullPackage',
  94. $class['package']['fullPackage']
  95. );
  96. }
  97. if (!empty($class['package']['category'])) {
  98. $xmlClass->setAttribute(
  99. 'category',
  100. $class['package']['category']
  101. );
  102. }
  103. if (!empty($class['package']['package'])) {
  104. $xmlClass->setAttribute(
  105. 'package',
  106. $class['package']['package']
  107. );
  108. }
  109. if (!empty($class['package']['subpackage'])) {
  110. $xmlClass->setAttribute(
  111. 'subpackage',
  112. $class['package']['subpackage']
  113. );
  114. }
  115. $xmlFile->appendChild($xmlClass);
  116. $xmlMetrics = $xmlDocument->createElement('metrics');
  117. $xmlMetrics->setAttribute('methods', $classMethods);
  118. $xmlMetrics->setAttribute('coveredmethods', $coveredMethods);
  119. $xmlMetrics->setAttribute('conditionals', 0);
  120. $xmlMetrics->setAttribute('coveredconditionals', 0);
  121. $xmlMetrics->setAttribute('statements', $classStatements);
  122. $xmlMetrics->setAttribute(
  123. 'coveredstatements',
  124. $coveredClassStatements
  125. );
  126. $xmlMetrics->setAttribute(
  127. 'elements',
  128. $classMethods +
  129. $classStatements
  130. /* + conditionals */
  131. );
  132. $xmlMetrics->setAttribute(
  133. 'coveredelements',
  134. $coveredMethods +
  135. $coveredClassStatements
  136. /* + coveredconditionals */
  137. );
  138. $xmlClass->appendChild($xmlMetrics);
  139. }
  140. foreach ($coverage as $line => $data) {
  141. if ($data === null || isset($lines[$line])) {
  142. continue;
  143. }
  144. $lines[$line] = array(
  145. 'count' => count($data), 'type' => 'stmt'
  146. );
  147. }
  148. ksort($lines);
  149. foreach ($lines as $line => $data) {
  150. $xmlLine = $xmlDocument->createElement('line');
  151. $xmlLine->setAttribute('num', $line);
  152. $xmlLine->setAttribute('type', $data['type']);
  153. if (isset($data['name'])) {
  154. $xmlLine->setAttribute('name', $data['name']);
  155. }
  156. if (isset($data['crap'])) {
  157. $xmlLine->setAttribute('crap', $data['crap']);
  158. }
  159. $xmlLine->setAttribute('count', $data['count']);
  160. $xmlFile->appendChild($xmlLine);
  161. }
  162. $linesOfCode = $item->getLinesOfCode();
  163. $xmlMetrics = $xmlDocument->createElement('metrics');
  164. $xmlMetrics->setAttribute('loc', $linesOfCode['loc']);
  165. $xmlMetrics->setAttribute('ncloc', $linesOfCode['ncloc']);
  166. $xmlMetrics->setAttribute('classes', $item->getNumClassesAndTraits());
  167. $xmlMetrics->setAttribute('methods', $item->getNumMethods());
  168. $xmlMetrics->setAttribute(
  169. 'coveredmethods',
  170. $item->getNumTestedMethods()
  171. );
  172. $xmlMetrics->setAttribute('conditionals', 0);
  173. $xmlMetrics->setAttribute('coveredconditionals', 0);
  174. $xmlMetrics->setAttribute(
  175. 'statements',
  176. $item->getNumExecutableLines()
  177. );
  178. $xmlMetrics->setAttribute(
  179. 'coveredstatements',
  180. $item->getNumExecutedLines()
  181. );
  182. $xmlMetrics->setAttribute(
  183. 'elements',
  184. $item->getNumMethods() + $item->getNumExecutableLines()
  185. /* + conditionals */
  186. );
  187. $xmlMetrics->setAttribute(
  188. 'coveredelements',
  189. $item->getNumTestedMethods() + $item->getNumExecutedLines()
  190. /* + coveredconditionals */
  191. );
  192. $xmlFile->appendChild($xmlMetrics);
  193. if ($namespace == 'global') {
  194. $xmlProject->appendChild($xmlFile);
  195. } else {
  196. if (!isset($packages[$namespace])) {
  197. $packages[$namespace] = $xmlDocument->createElement(
  198. 'package'
  199. );
  200. $packages[$namespace]->setAttribute('name', $namespace);
  201. $xmlProject->appendChild($packages[$namespace]);
  202. }
  203. $packages[$namespace]->appendChild($xmlFile);
  204. }
  205. }
  206. $linesOfCode = $report->getLinesOfCode();
  207. $xmlMetrics = $xmlDocument->createElement('metrics');
  208. $xmlMetrics->setAttribute('files', count($report));
  209. $xmlMetrics->setAttribute('loc', $linesOfCode['loc']);
  210. $xmlMetrics->setAttribute('ncloc', $linesOfCode['ncloc']);
  211. $xmlMetrics->setAttribute(
  212. 'classes',
  213. $report->getNumClassesAndTraits()
  214. );
  215. $xmlMetrics->setAttribute('methods', $report->getNumMethods());
  216. $xmlMetrics->setAttribute(
  217. 'coveredmethods',
  218. $report->getNumTestedMethods()
  219. );
  220. $xmlMetrics->setAttribute('conditionals', 0);
  221. $xmlMetrics->setAttribute('coveredconditionals', 0);
  222. $xmlMetrics->setAttribute(
  223. 'statements',
  224. $report->getNumExecutableLines()
  225. );
  226. $xmlMetrics->setAttribute(
  227. 'coveredstatements',
  228. $report->getNumExecutedLines()
  229. );
  230. $xmlMetrics->setAttribute(
  231. 'elements',
  232. $report->getNumMethods() + $report->getNumExecutableLines()
  233. /* + conditionals */
  234. );
  235. $xmlMetrics->setAttribute(
  236. 'coveredelements',
  237. $report->getNumTestedMethods() + $report->getNumExecutedLines()
  238. /* + coveredconditionals */
  239. );
  240. $xmlProject->appendChild($xmlMetrics);
  241. if ($target !== null) {
  242. if (!is_dir(dirname($target))) {
  243. mkdir(dirname($target), 0777, true);
  244. }
  245. return $xmlDocument->save($target);
  246. } else {
  247. return $xmlDocument->saveXML();
  248. }
  249. }
  250. }