From: Julien HENRY Date: Wed, 18 Jul 2018 08:39:11 +0000 (+0200) Subject: SONAR-8572 Don't raise issue about comment density on test files X-Git-Tag: 7.5~769 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=9089d736c7fddb47238093009f19c76f3bc9006b;p=sonarqube.git SONAR-8572 Don't raise issue about comment density on test files --- diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/commonrule/CommentDensityRule.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/commonrule/CommentDensityRule.java index 6d257e2dfb1..5778ad7123d 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/commonrule/CommentDensityRule.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/issue/commonrule/CommentDensityRule.java @@ -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 commentLinesMeasure = measureRepository.getRawMeasure(file, commentLinesMetric); Optional 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 commentDensityMeasure, Optional commentLinesMeasure, - Optional nclocMeasure, double minCommentDensity) { + Optional 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)); diff --git a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepository.java b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepository.java index 97bb0a1cf33..71bac5bc012 100644 --- a/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepository.java +++ b/server/sonar-ce-task-projectanalysis/src/main/java/org/sonar/ce/task/projectanalysis/measure/MeasureRepository.java @@ -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 { diff --git a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/commonrule/CommentDensityRuleTest.java b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/commonrule/CommentDensityRuleTest.java index b4db79a6b99..5c5883ec5ef 100644 --- a/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/commonrule/CommentDensityRuleTest.java +++ b/server/sonar-ce-task-projectanalysis/src/test/java/org/sonar/ce/task/projectanalysis/issue/commonrule/CommentDensityRuleTest.java @@ -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)); + } + + }