HtmlCoverageReportTest.php 6.6 KB

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