Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

ViewsCommentMeasuresStepTest.java 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. /*
  2. * SonarQube
  3. * Copyright (C) 2009-2021 SonarSource SA
  4. * mailto:info AT sonarsource DOT com
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU Lesser General Public
  8. * License as published by the Free Software Foundation; either
  9. * version 3 of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * Lesser General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU Lesser General Public License
  17. * along with this program; if not, write to the Free Software Foundation,
  18. * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  19. */
  20. package org.sonar.ce.task.projectanalysis.step;
  21. import org.junit.Before;
  22. import org.junit.Rule;
  23. import org.junit.Test;
  24. import org.sonar.ce.task.projectanalysis.component.TreeRootHolderRule;
  25. import org.sonar.ce.task.projectanalysis.measure.MeasureRepositoryRule;
  26. import org.sonar.ce.task.projectanalysis.metric.MetricRepositoryRule;
  27. import org.sonar.ce.task.step.ComputationStep;
  28. import org.sonar.ce.task.step.TestComputationStepContext;
  29. import static org.assertj.core.api.Assertions.assertThat;
  30. import static org.sonar.api.measures.CoreMetrics.COMMENT_LINES;
  31. import static org.sonar.api.measures.CoreMetrics.COMMENT_LINES_DENSITY;
  32. import static org.sonar.api.measures.CoreMetrics.COMMENT_LINES_DENSITY_KEY;
  33. import static org.sonar.api.measures.CoreMetrics.COMMENT_LINES_KEY;
  34. import static org.sonar.api.measures.CoreMetrics.NCLOC;
  35. import static org.sonar.api.measures.CoreMetrics.NCLOC_KEY;
  36. import static org.sonar.api.measures.CoreMetrics.PUBLIC_API;
  37. import static org.sonar.api.measures.CoreMetrics.PUBLIC_API_KEY;
  38. import static org.sonar.api.measures.CoreMetrics.PUBLIC_DOCUMENTED_API_DENSITY;
  39. import static org.sonar.api.measures.CoreMetrics.PUBLIC_DOCUMENTED_API_DENSITY_KEY;
  40. import static org.sonar.api.measures.CoreMetrics.PUBLIC_UNDOCUMENTED_API;
  41. import static org.sonar.api.measures.CoreMetrics.PUBLIC_UNDOCUMENTED_API_KEY;
  42. import static org.sonar.ce.task.projectanalysis.component.Component.Type.PROJECT_VIEW;
  43. import static org.sonar.ce.task.projectanalysis.component.Component.Type.SUBVIEW;
  44. import static org.sonar.ce.task.projectanalysis.component.Component.Type.VIEW;
  45. import static org.sonar.ce.task.projectanalysis.component.ViewsComponent.builder;
  46. import static org.sonar.ce.task.projectanalysis.measure.Measure.newMeasureBuilder;
  47. public class ViewsCommentMeasuresStepTest {
  48. private static final int ROOT_REF = 1;
  49. private static final int MODULE_REF = 12;
  50. private static final int SUB_MODULE_REF = 123;
  51. private static final int PROJECTVIEW_1_REF = 1231;
  52. private static final int PROJECTVIEW_2_REF = 1232;
  53. private static final int PROJECTVIEW_3_REF = 1233;
  54. @Rule
  55. public TreeRootHolderRule treeRootHolder = new TreeRootHolderRule();
  56. @Rule
  57. public MetricRepositoryRule metricRepository = new MetricRepositoryRule()
  58. .add(NCLOC)
  59. .add(COMMENT_LINES)
  60. .add(COMMENT_LINES_DENSITY)
  61. .add(PUBLIC_API)
  62. .add(PUBLIC_UNDOCUMENTED_API)
  63. .add(PUBLIC_DOCUMENTED_API_DENSITY);
  64. @Rule
  65. public MeasureRepositoryRule measureRepository = MeasureRepositoryRule.create(treeRootHolder, metricRepository);
  66. ComputationStep underTest = new CommentMeasuresStep(treeRootHolder, metricRepository, measureRepository);
  67. @Before
  68. public void setUp() {
  69. treeRootHolder.setRoot(
  70. builder(VIEW, ROOT_REF)
  71. .addChildren(
  72. builder(SUBVIEW, MODULE_REF)
  73. .addChildren(
  74. builder(SUBVIEW, SUB_MODULE_REF)
  75. .addChildren(
  76. builder(PROJECT_VIEW, PROJECTVIEW_1_REF).build(),
  77. builder(PROJECT_VIEW, PROJECTVIEW_2_REF).build())
  78. .build())
  79. .build(),
  80. builder(PROJECT_VIEW, PROJECTVIEW_3_REF).build())
  81. .build());
  82. }
  83. @Test
  84. public void aggregate_comment_lines() {
  85. addRawMeasure(PROJECTVIEW_1_REF, COMMENT_LINES_KEY, 100);
  86. addRawMeasure(PROJECTVIEW_2_REF, COMMENT_LINES_KEY, 400);
  87. addRawMeasure(PROJECTVIEW_3_REF, COMMENT_LINES_KEY, 500);
  88. underTest.execute(new TestComputationStepContext());
  89. assertProjectViewsHasNoNewRawMeasure();
  90. assertRawMeasureValue(SUB_MODULE_REF, COMMENT_LINES_KEY, 500);
  91. assertRawMeasureValue(MODULE_REF, COMMENT_LINES_KEY, 500);
  92. assertRawMeasureValue(ROOT_REF, COMMENT_LINES_KEY, 1000);
  93. }
  94. @Test
  95. public void compute_comment_density() {
  96. addRawMeasure(PROJECTVIEW_1_REF, NCLOC_KEY, 100);
  97. addRawMeasure(PROJECTVIEW_1_REF, COMMENT_LINES_KEY, 150);
  98. addRawMeasure(PROJECTVIEW_2_REF, NCLOC_KEY, 200);
  99. addRawMeasure(PROJECTVIEW_2_REF, COMMENT_LINES_KEY, 50);
  100. addRawMeasure(PROJECTVIEW_3_REF, NCLOC_KEY, 300);
  101. addRawMeasure(PROJECTVIEW_3_REF, COMMENT_LINES_KEY, 5);
  102. addRawMeasure(SUB_MODULE_REF, NCLOC_KEY, 300);
  103. addRawMeasure(MODULE_REF, NCLOC_KEY, 300);
  104. addRawMeasure(ROOT_REF, NCLOC_KEY, 300);
  105. underTest.execute(new TestComputationStepContext());
  106. assertProjectViewsHasNoNewRawMeasure();
  107. assertRawMeasureValue(SUB_MODULE_REF, COMMENT_LINES_DENSITY_KEY, 40d);
  108. assertRawMeasureValue(MODULE_REF, COMMENT_LINES_DENSITY_KEY, 40d);
  109. assertRawMeasureValue(ROOT_REF, COMMENT_LINES_DENSITY_KEY, 40.6d);
  110. }
  111. @Test
  112. public void compute_zero_comment_density_when_zero_comment() {
  113. addRawMeasure(PROJECTVIEW_1_REF, NCLOC_KEY, 100);
  114. addRawMeasure(PROJECTVIEW_1_REF, COMMENT_LINES_KEY, 0);
  115. addRawMeasure(PROJECTVIEW_2_REF, NCLOC_KEY, 200);
  116. addRawMeasure(PROJECTVIEW_2_REF, COMMENT_LINES_KEY, 0);
  117. addRawMeasure(SUB_MODULE_REF, NCLOC_KEY, 300);
  118. addRawMeasure(MODULE_REF, NCLOC_KEY, 300);
  119. addRawMeasure(ROOT_REF, NCLOC_KEY, 300);
  120. underTest.execute(new TestComputationStepContext());
  121. assertProjectViewsHasNoNewRawMeasure();
  122. assertRawMeasureValue(SUB_MODULE_REF, COMMENT_LINES_DENSITY_KEY, 0d);
  123. assertRawMeasureValue(MODULE_REF, COMMENT_LINES_DENSITY_KEY, 0d);
  124. assertRawMeasureValue(ROOT_REF, COMMENT_LINES_DENSITY_KEY, 0d);
  125. }
  126. @Test
  127. public void not_compute_comment_density_when_zero_ncloc_and_zero_comment() {
  128. addRawMeasure(PROJECTVIEW_1_REF, NCLOC_KEY, 0);
  129. addRawMeasure(PROJECTVIEW_1_REF, COMMENT_LINES_KEY, 0);
  130. addRawMeasure(PROJECTVIEW_2_REF, NCLOC_KEY, 0);
  131. addRawMeasure(PROJECTVIEW_2_REF, COMMENT_LINES_KEY, 0);
  132. addRawMeasure(SUB_MODULE_REF, NCLOC_KEY, 0);
  133. addRawMeasure(MODULE_REF, NCLOC_KEY, 0);
  134. addRawMeasure(ROOT_REF, NCLOC_KEY, 0);
  135. underTest.execute(new TestComputationStepContext());
  136. assertProjectViewsHasNoNewRawMeasure();
  137. assertNoRawMeasures(COMMENT_LINES_DENSITY_KEY);
  138. }
  139. @Test
  140. public void not_compute_comment_density_when_no_ncloc() {
  141. addRawMeasure(PROJECTVIEW_1_REF, COMMENT_LINES_KEY, 150);
  142. addRawMeasure(PROJECTVIEW_2_REF, COMMENT_LINES_KEY, 50);
  143. underTest.execute(new TestComputationStepContext());
  144. assertNoRawMeasures(COMMENT_LINES_DENSITY_KEY);
  145. }
  146. @Test
  147. public void not_compute_comment_density_when_no_comment() {
  148. addRawMeasure(PROJECTVIEW_1_REF, NCLOC_KEY, 100);
  149. addRawMeasure(PROJECTVIEW_2_REF, NCLOC_KEY, 100);
  150. addRawMeasure(SUB_MODULE_REF, NCLOC_KEY, 200);
  151. addRawMeasure(MODULE_REF, NCLOC_KEY, 200);
  152. addRawMeasure(ROOT_REF, NCLOC_KEY, 200);
  153. underTest.execute(new TestComputationStepContext());
  154. assertNoRawMeasures(COMMENT_LINES_DENSITY_KEY);
  155. }
  156. @Test
  157. public void aggregate_public_api() {
  158. addRawMeasure(PROJECTVIEW_1_REF, PUBLIC_API_KEY, 100);
  159. addRawMeasure(PROJECTVIEW_2_REF, PUBLIC_API_KEY, 400);
  160. underTest.execute(new TestComputationStepContext());
  161. assertProjectViewsHasNoNewRawMeasure();
  162. assertRawMeasureValue(SUB_MODULE_REF, PUBLIC_API_KEY, 500);
  163. assertRawMeasureValue(MODULE_REF, PUBLIC_API_KEY, 500);
  164. assertRawMeasureValue(ROOT_REF, PUBLIC_API_KEY, 500);
  165. }
  166. @Test
  167. public void aggregate_public_undocumented_api() {
  168. addRawMeasure(PROJECTVIEW_1_REF, PUBLIC_UNDOCUMENTED_API_KEY, 100);
  169. addRawMeasure(PROJECTVIEW_2_REF, PUBLIC_UNDOCUMENTED_API_KEY, 400);
  170. underTest.execute(new TestComputationStepContext());
  171. assertProjectViewsHasNoNewRawMeasure();
  172. assertRawMeasureValue(SUB_MODULE_REF, PUBLIC_UNDOCUMENTED_API_KEY, 500);
  173. assertRawMeasureValue(MODULE_REF, PUBLIC_UNDOCUMENTED_API_KEY, 500);
  174. assertRawMeasureValue(ROOT_REF, PUBLIC_UNDOCUMENTED_API_KEY, 500);
  175. }
  176. @Test
  177. public void compute_public_documented_api_density() {
  178. addRawMeasure(PROJECTVIEW_1_REF, PUBLIC_API_KEY, 100);
  179. addRawMeasure(PROJECTVIEW_1_REF, PUBLIC_UNDOCUMENTED_API_KEY, 50);
  180. addRawMeasure(PROJECTVIEW_2_REF, PUBLIC_API_KEY, 400);
  181. addRawMeasure(PROJECTVIEW_2_REF, PUBLIC_UNDOCUMENTED_API_KEY, 100);
  182. addRawMeasure(PROJECTVIEW_3_REF, PUBLIC_API_KEY, 300);
  183. addRawMeasure(PROJECTVIEW_3_REF, PUBLIC_UNDOCUMENTED_API_KEY, 200);
  184. underTest.execute(new TestComputationStepContext());
  185. assertProjectViewsHasNoNewRawMeasure();
  186. assertRawMeasureValue(SUB_MODULE_REF, PUBLIC_DOCUMENTED_API_DENSITY_KEY, 70d);
  187. assertRawMeasureValue(MODULE_REF, PUBLIC_DOCUMENTED_API_DENSITY_KEY, 70d);
  188. assertRawMeasureValue(ROOT_REF, PUBLIC_DOCUMENTED_API_DENSITY_KEY, 56.3d);
  189. }
  190. @Test
  191. public void not_compute_public_documented_api_density_when_no_public_api() {
  192. addRawMeasure(PROJECTVIEW_1_REF, PUBLIC_UNDOCUMENTED_API_KEY, 50);
  193. addRawMeasure(PROJECTVIEW_2_REF, PUBLIC_UNDOCUMENTED_API_KEY, 100);
  194. underTest.execute(new TestComputationStepContext());
  195. assertNoRawMeasures(PUBLIC_DOCUMENTED_API_DENSITY_KEY);
  196. }
  197. @Test
  198. public void not_compute_public_documented_api_density_when_no_public_undocumented_api() {
  199. addRawMeasure(PROJECTVIEW_1_REF, PUBLIC_API_KEY, 50);
  200. addRawMeasure(PROJECTVIEW_2_REF, PUBLIC_API_KEY, 100);
  201. underTest.execute(new TestComputationStepContext());
  202. assertNoRawMeasures(PUBLIC_DOCUMENTED_API_DENSITY_KEY);
  203. }
  204. @Test
  205. public void not_compute_public_documented_api_density_when_public_api_is_zero() {
  206. addRawMeasure(PROJECTVIEW_1_REF, PUBLIC_API_KEY, 0);
  207. addRawMeasure(PROJECTVIEW_1_REF, PUBLIC_UNDOCUMENTED_API_KEY, 50);
  208. addRawMeasure(PROJECTVIEW_2_REF, PUBLIC_API_KEY, 0);
  209. addRawMeasure(PROJECTVIEW_2_REF, PUBLIC_UNDOCUMENTED_API_KEY, 100);
  210. underTest.execute(new TestComputationStepContext());
  211. assertNoRawMeasures(PUBLIC_DOCUMENTED_API_DENSITY_KEY);
  212. }
  213. @Test
  214. public void compute_100_percent_public_documented_api_density_when_public_undocumented_api_is_zero() {
  215. addRawMeasure(PROJECTVIEW_1_REF, PUBLIC_API_KEY, 100);
  216. addRawMeasure(PROJECTVIEW_1_REF, PUBLIC_UNDOCUMENTED_API_KEY, 0);
  217. addRawMeasure(PROJECTVIEW_2_REF, PUBLIC_API_KEY, 400);
  218. addRawMeasure(PROJECTVIEW_2_REF, PUBLIC_UNDOCUMENTED_API_KEY, 0);
  219. underTest.execute(new TestComputationStepContext());
  220. assertProjectViewsHasNoNewRawMeasure();
  221. assertRawMeasureValue(SUB_MODULE_REF, PUBLIC_DOCUMENTED_API_DENSITY_KEY, 100d);
  222. assertRawMeasureValue(MODULE_REF, PUBLIC_DOCUMENTED_API_DENSITY_KEY, 100d);
  223. assertRawMeasureValue(ROOT_REF, PUBLIC_DOCUMENTED_API_DENSITY_KEY, 100d);
  224. }
  225. @Test
  226. public void compute_nothing_when_no_data() {
  227. underTest.execute(new TestComputationStepContext());
  228. assertProjectViewsHasNoNewRawMeasure();
  229. assertThat(measureRepository.getAddedRawMeasures(SUB_MODULE_REF)).isEmpty();
  230. assertThat(measureRepository.getAddedRawMeasures(MODULE_REF)).isEmpty();
  231. assertThat(measureRepository.getAddedRawMeasures(ROOT_REF)).isEmpty();
  232. }
  233. private void assertNoRawMeasures(String metricKey) {
  234. assertNoRawMeasure(metricKey, SUB_MODULE_REF);
  235. assertNoRawMeasure(metricKey, MODULE_REF);
  236. assertNoRawMeasure(metricKey, ROOT_REF);
  237. }
  238. private void assertNoRawMeasure(String metricKey, int componentRef) {
  239. assertThat(measureRepository.getAddedRawMeasure(componentRef, metricKey)).isNotPresent();
  240. }
  241. private void addRawMeasure(int componentRef, String metricKey, int value) {
  242. measureRepository.addRawMeasure(componentRef, metricKey, newMeasureBuilder().create(value));
  243. }
  244. private void assertProjectViewsHasNoNewRawMeasure() {
  245. assertThat(measureRepository.getAddedRawMeasures(PROJECTVIEW_1_REF)).isEmpty();
  246. assertThat(measureRepository.getAddedRawMeasures(PROJECTVIEW_2_REF)).isEmpty();
  247. }
  248. private void assertRawMeasureValue(int componentRef, String metricKey, int value) {
  249. assertThat(measureRepository.getAddedRawMeasure(componentRef, metricKey).get().getIntValue()).isEqualTo(value);
  250. }
  251. private void assertRawMeasureValue(int componentRef, String metricKey, double value) {
  252. assertThat(measureRepository.getAddedRawMeasure(componentRef, metricKey).get().getDoubleValue()).isEqualTo(value);
  253. }
  254. }