PageRenderTime 48ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/Cake/Test/Case/TestSuite/HtmlCoverageReportTest.php

https://gitlab.com/caritas/caritas
PHP | 237 lines | 164 code | 15 blank | 58 comment | 4 complexity | ebce1794b015376b13e3a998041681dc MD5 | raw file
  1. <?php
  2. /**
  3. * Test case for HtmlCoverageReport
  4. *
  5. * PHP5
  6. *
  7. * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
  8. * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  9. *
  10. * Licensed under The MIT License
  11. * For full copyright and license information, please see the LICENSE.txt
  12. * Redistributions of files must retain the above copyright notice.
  13. *
  14. * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
  15. * @link http://cakephp.org CakePHP(tm) Project
  16. * @package Cake.Test.Case.TestSuite
  17. * @since CakePHP(tm) v 2.0
  18. * @license http://www.opensource.org/licenses/mit-license.php MIT License
  19. */
  20. App::uses('HtmlCoverageReport', 'TestSuite/Coverage');
  21. App::uses('CakeBaseReporter', 'TestSuite/Reporter');
  22. /**
  23. * Class HtmlCoverageReportTest
  24. *
  25. * @package Cake.Test.Case.TestSuite
  26. */
  27. class HtmlCoverageReportTest extends CakeTestCase {
  28. /**
  29. * setUp
  30. *
  31. * @return void
  32. */
  33. public function setUp() {
  34. parent::setUp();
  35. App::build(array(
  36. 'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS)
  37. ), App::RESET);
  38. CakePlugin::load(array('TestPlugin'));
  39. $reporter = new CakeBaseReporter();
  40. $reporter->params = array('app' => false, 'plugin' => false, 'group' => false);
  41. $coverage = array();
  42. $this->Coverage = new HtmlCoverageReport($coverage, $reporter);
  43. }
  44. /**
  45. * test getting the path filters.
  46. *
  47. * @return void
  48. */
  49. public function testGetPathFilter() {
  50. $this->Coverage->appTest = false;
  51. $result = $this->Coverage->getPathFilter();
  52. $this->assertEquals(CAKE, $result);
  53. $this->Coverage->appTest = true;
  54. $result = $this->Coverage->getPathFilter();
  55. $this->assertEquals(ROOT . DS . APP_DIR . DS, $result);
  56. $this->Coverage->appTest = false;
  57. $this->Coverage->pluginTest = 'TestPlugin';
  58. $result = $this->Coverage->getPathFilter();
  59. $this->assertEquals(CakePlugin::path('TestPlugin'), $result);
  60. }
  61. /**
  62. * test filtering coverage data.
  63. *
  64. * @return void
  65. */
  66. public function testFilterCoverageDataByPathRemovingElements() {
  67. $data = array(
  68. CAKE . 'dispatcher.php' => array(
  69. 10 => -1,
  70. 12 => 1
  71. ),
  72. APP . 'app_model.php' => array(
  73. 50 => 1,
  74. 52 => -1
  75. )
  76. );
  77. $this->Coverage->setCoverage($data);
  78. $result = $this->Coverage->filterCoverageDataByPath(CAKE);
  79. $this->assertTrue(isset($result[CAKE . 'dispatcher.php']));
  80. $this->assertFalse(isset($result[APP . 'app_model.php']));
  81. }
  82. /**
  83. * test generating HTML reports from file arrays.
  84. *
  85. * @return void
  86. */
  87. public function testGenerateDiff() {
  88. $file = array(
  89. 'line 1',
  90. 'line 2',
  91. 'line 3',
  92. 'line 4',
  93. 'line 5',
  94. 'line 6',
  95. 'line 7',
  96. 'line 8',
  97. 'line 9',
  98. 'line 10',
  99. );
  100. $coverage = array(
  101. 1 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff')),
  102. 2 => -2,
  103. 3 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff')),
  104. 4 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff')),
  105. 5 => -1,
  106. 6 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff')),
  107. 7 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff')),
  108. 8 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff')),
  109. 9 => -1,
  110. 10 => array(array('id' => 'HtmlCoverageReportTest::testGenerateDiff'))
  111. );
  112. $result = $this->Coverage->generateDiff('myfile.php', $file, $coverage);
  113. $this->assertRegExp('/myfile\.php Code coverage\: \d+\.?\d*\%/', $result);
  114. $this->assertRegExp('/<div class="code-coverage-results" id\="coverage\-myfile\.php-' . md5('myfile.php') . '"/', $result);
  115. $this->assertRegExp('/<pre>/', $result);
  116. foreach ($file as $i => $line) {
  117. $this->assertTrue(strpos($line, $result) !== 0, 'Content is missing ' . $i);
  118. $class = 'covered';
  119. if (in_array($i + 1, array(5, 9, 2))) {
  120. $class = 'uncovered';
  121. }
  122. if ($i + 1 === 2) {
  123. $class .= ' dead';
  124. }
  125. $this->assertTrue(strpos($class, $result) !== 0, 'Class name is wrong ' . $i);
  126. }
  127. }
  128. /**
  129. * Test that coverage works with phpunit 3.6 as the data formats from coverage are totally different.
  130. *
  131. * @return void
  132. */
  133. public function testPhpunit36Compatibility() {
  134. $file = array(
  135. 'line 1',
  136. 'line 2',
  137. 'line 3',
  138. 'line 4',
  139. 'line 5',
  140. 'line 6',
  141. 'line 7',
  142. 'line 8',
  143. 'line 9',
  144. 'line 10',
  145. );
  146. $coverage = array(
  147. 1 => array('HtmlCoverageReportTest::testGenerateDiff'),
  148. 2 => null,
  149. 3 => array('HtmlCoverageReportTest::testGenerateDiff'),
  150. 4 => array('HtmlCoverageReportTest::testGenerateDiff'),
  151. 5 => array(),
  152. 6 => array('HtmlCoverageReportTest::testGenerateDiff'),
  153. 7 => array('HtmlCoverageReportTest::testGenerateDiff'),
  154. 8 => array('HtmlCoverageReportTest::testGenerateDiff'),
  155. 9 => array(),
  156. 10 => array('HtmlCoverageReportTest::testSomething', 'HtmlCoverageReportTest::testGenerateDiff')
  157. );
  158. $result = $this->Coverage->generateDiff('myfile.php', $file, $coverage);
  159. $this->assertRegExp('/myfile\.php Code coverage\: \d+\.?\d*\%/', $result);
  160. $this->assertRegExp('/<div class="code-coverage-results" id\="coverage\-myfile\.php-' . md5('myfile.php') . '"/', $result);
  161. $this->assertRegExp('/<pre>/', $result);
  162. foreach ($file as $i => $line) {
  163. $this->assertTrue(strpos($line, $result) !== 0, 'Content is missing ' . $i);
  164. $class = 'covered';
  165. if (in_array($i + 1, array(5, 9, 2))) {
  166. $class = 'uncovered';
  167. }
  168. if ($i + 1 === 2) {
  169. $class .= ' dead';
  170. }
  171. $this->assertTrue(strpos($class, $result) !== 0, 'Class name is wrong ' . $i);
  172. }
  173. }
  174. /**
  175. * test that covering methods show up as title attributes for lines.
  176. *
  177. * @return void
  178. */
  179. public function testCoveredLinesTitleAttributes() {
  180. $file = array(
  181. 'line 1',
  182. 'line 2',
  183. 'line 3',
  184. 'line 4',
  185. 'line 5',
  186. );
  187. $coverage = array(
  188. 1 => array(array('id' => 'HtmlCoverageReportTest::testAwesomeness')),
  189. 2 => -2,
  190. 3 => array(array('id' => 'HtmlCoverageReportTest::testCakeIsSuperior')),
  191. 4 => array(array('id' => 'HtmlCoverageReportTest::testOther')),
  192. 5 => -1
  193. );
  194. $result = $this->Coverage->generateDiff('myfile.php', $file, $coverage);
  195. $this->assertTrue(
  196. strpos($result, "title=\"Covered by:\nHtmlCoverageReportTest::testAwesomeness\n\"><span class=\"line-num\">1") !== false,
  197. 'Missing method coverage for line 1'
  198. );
  199. $this->assertTrue(
  200. strpos($result, "title=\"Covered by:\nHtmlCoverageReportTest::testCakeIsSuperior\n\"><span class=\"line-num\">3") !== false,
  201. 'Missing method coverage for line 3'
  202. );
  203. $this->assertTrue(
  204. strpos($result, "title=\"Covered by:\nHtmlCoverageReportTest::testOther\n\"><span class=\"line-num\">4") !== false,
  205. 'Missing method coverage for line 4'
  206. );
  207. $this->assertTrue(
  208. strpos($result, "title=\"\"><span class=\"line-num\">5") !== false,
  209. 'Coverage report is wrong for line 5'
  210. );
  211. }
  212. /**
  213. * tearDown
  214. *
  215. * @return void
  216. */
  217. public function tearDown() {
  218. CakePlugin::unload();
  219. unset($this->Coverage);
  220. parent::tearDown();
  221. }
  222. }