]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-8572 Don't raise issue about comment density on test files
authorJulien HENRY <julien.henry@sonarsource.com>
Wed, 18 Jul 2018 08:39:11 +0000 (10:39 +0200)
committerSonarTech <sonartech@sonarsource.com>
Thu, 19 Jul 2018 18:21:25 +0000 (20:21 +0200)
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/commonrule/CommentDensityRule.java
server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepository.java
server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/commonrule/CommentDensityRuleTest.java

index 6d257e2dfb181c538061dfb7ceafe6b6047564f1..5778ad7123d189aa3f8467acdc029f565dcd91e0 100644 (file)
@@ -22,7 +22,6 @@ package org.sonar.ce.task.projectanalysis.issue.commonrule;
 import com.google.common.base.Optional;
 import org.sonar.api.measures.CoreMetrics;
 import org.sonar.ce.task.projectanalysis.component.Component;
-import org.sonar.ce.task.projectanalysis.component.Component;
 import org.sonar.ce.task.projectanalysis.measure.Measure;
 import org.sonar.ce.task.projectanalysis.measure.MeasureRepository;
 import org.sonar.ce.task.projectanalysis.metric.Metric;
@@ -54,7 +53,7 @@ public class CommentDensityRule extends CommonRule {
     Optional<Measure> commentLinesMeasure = measureRepository.getRawMeasure(file, commentLinesMetric);
     Optional<Measure> nclocMeasure = measureRepository.getRawMeasure(file, nclocMetric);
 
-    if (commentDensityMeasure.isPresent() && nclocMeasure.isPresent() && nclocMeasure.get().getIntValue() > 0) {
+    if (!file.getFileAttributes().isUnitTest() && commentDensityMeasure.isPresent() && nclocMeasure.isPresent() && nclocMeasure.get().getIntValue() > 0) {
       // this is a small optimization to not load the minimum value when the measures are not present
       double minCommentDensity = getMinDensity(activeRule);
       if (commentDensityMeasure.get().getDoubleValue() < minCommentDensity) {
@@ -64,7 +63,7 @@ public class CommentDensityRule extends CommonRule {
     return null;
   }
 
-  private double getMinDensity(ActiveRule activeRule) {
+  private static double getMinDensity(ActiveRule activeRule) {
     double min = getMinDensityParam(activeRule, CommonRuleKeys.INSUFFICIENT_COMMENT_DENSITY_PROPERTY);
     if (min >= 100.0) {
       throw new IllegalStateException("Minimum density of rule [" + activeRule.getRuleKey() + "] is incorrect. Got [100] but must be strictly less than 100.");
@@ -73,7 +72,7 @@ public class CommentDensityRule extends CommonRule {
   }
 
   private static CommonRuleIssue generateIssue(Optional<Measure> commentDensityMeasure, Optional<Measure> commentLinesMeasure,
-                                               Optional<Measure> nclocMeasure, double minCommentDensity) {
+    Optional<Measure> nclocMeasure, double minCommentDensity) {
     int commentLines = commentLinesMeasure.isPresent() ? commentLinesMeasure.get().getIntValue() : 0;
     int ncloc = nclocMeasure.get().getIntValue();
     int minExpectedCommentLines = (int) Math.ceil(minCommentDensity * ncloc / (100 - minCommentDensity));
index 97bb0a1cf333833b4673f56499088d87ab8f6d97..71bac5bc0124c7190a0f86e6f6c8c915c5edb942 100644 (file)
@@ -25,9 +25,6 @@ import java.util.Set;
 import org.sonar.ce.task.projectanalysis.component.Component;
 import org.sonar.ce.task.projectanalysis.metric.Metric;
 import org.sonar.ce.task.projectanalysis.metric.MetricImpl;
-import org.sonar.ce.task.projectanalysis.component.Component;
-import org.sonar.ce.task.projectanalysis.metric.Metric;
-import org.sonar.ce.task.projectanalysis.metric.MetricImpl;
 
 public interface MeasureRepository {
 
index b4db79a6b992ac9a89e11f35b4256def55550cba..5c5883ec5efbe852e52c9d48ffd32d1feb4cb527 100644 (file)
@@ -51,6 +51,10 @@ public class CommentDensityRuleTest {
     .setFileAttributes(new FileAttributes(false, PLUGIN_KEY, 1))
     .build();
 
+  static ReportComponent TEST_FILE = ReportComponent.builder(Component.Type.FILE, 1)
+    .setFileAttributes(new FileAttributes(true, PLUGIN_KEY, 1))
+    .build();
+
   @Rule
   public ExpectedException thrown = ExpectedException.none();
 
@@ -83,10 +87,7 @@ public class CommentDensityRuleTest {
 
   @Test
   public void issue_if_not_enough_comments() {
-    activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, ImmutableMap.of(CommonRuleKeys.INSUFFICIENT_COMMENT_DENSITY_PROPERTY, "25"), 1_000L, PLUGIN_KEY));
-    measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_DENSITY_KEY, Measure.newMeasureBuilder().create(10.0, 1));
-    measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_KEY, Measure.newMeasureBuilder().create(40));
-    measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.NCLOC_KEY, Measure.newMeasureBuilder().create(360));
+    prepareForIssue("25", FILE, 10.0, 40, 360);
 
     DefaultIssue issue = underTest.processFile(FILE, PLUGIN_KEY);
 
@@ -98,12 +99,18 @@ public class CommentDensityRuleTest {
     assertThat(issue.message()).isEqualTo("80 more comment lines need to be written to reach the minimum threshold of 25.0% comment density.");
   }
 
+  @Test
+  public void no_issues_on_tests() {
+    prepareForIssue("25", TEST_FILE, 10.0, 40, 360);
+
+    DefaultIssue issue = underTest.processFile(TEST_FILE, PLUGIN_KEY);
+
+    assertThat(issue).isNull();
+  }
+
   @Test
   public void issue_if_not_enough_comments__test_ceil() {
-    activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, ImmutableMap.of(CommonRuleKeys.INSUFFICIENT_COMMENT_DENSITY_PROPERTY, "25"), 1_000L, PLUGIN_KEY));
-    measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_DENSITY_KEY, Measure.newMeasureBuilder().create(0.0, 1));
-    measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_KEY, Measure.newMeasureBuilder().create(0));
-    measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.NCLOC_KEY, Measure.newMeasureBuilder().create(1));
+    prepareForIssue("25", FILE, 0.0, 0, 1);
 
     DefaultIssue issue = underTest.processFile(FILE, PLUGIN_KEY);
 
@@ -122,11 +129,17 @@ public class CommentDensityRuleTest {
     thrown.expect(IllegalStateException.class);
     thrown.expectMessage("Minimum density of rule [common-java:InsufficientCommentDensity] is incorrect. Got [100] but must be strictly less than 100.");
 
-    activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, ImmutableMap.of(CommonRuleKeys.INSUFFICIENT_COMMENT_DENSITY_PROPERTY, "100"), 1_000L, PLUGIN_KEY));
-    measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_DENSITY_KEY, Measure.newMeasureBuilder().create(0.0, 1));
-    measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_KEY, Measure.newMeasureBuilder().create(0));
-    measureRepository.addRawMeasure(FILE.getReportAttributes().getRef(), CoreMetrics.NCLOC_KEY, Measure.newMeasureBuilder().create(1));
+    prepareForIssue("100", FILE, 0.0, 0, 1);
 
     underTest.processFile(FILE, PLUGIN_KEY);
   }
+
+  private void prepareForIssue(String minDensity, ReportComponent file, double commentLineDensity, int commentLines, int ncloc) {
+    activeRuleHolder.put(new ActiveRule(RULE_KEY, Severity.CRITICAL, ImmutableMap.of(CommonRuleKeys.INSUFFICIENT_COMMENT_DENSITY_PROPERTY, minDensity), 1_000L, PLUGIN_KEY));
+    measureRepository.addRawMeasure(file.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_DENSITY_KEY, Measure.newMeasureBuilder().create(commentLineDensity, 1));
+    measureRepository.addRawMeasure(file.getReportAttributes().getRef(), CoreMetrics.COMMENT_LINES_KEY, Measure.newMeasureBuilder().create(commentLines));
+    measureRepository.addRawMeasure(file.getReportAttributes().getRef(), CoreMetrics.NCLOC_KEY, Measure.newMeasureBuilder().create(ncloc));
+  }
+
+
 }