Skip to content

Commit

Permalink
SONAR-8281 coverage_*_data measure should be sorted
Browse files Browse the repository at this point in the history
  • Loading branch information
henryju committed Oct 21, 2016
1 parent 9ddf6fd commit 8ed37b5
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 6 deletions.
Expand Up @@ -29,6 +29,7 @@
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.TreeMap;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
Expand Down Expand Up @@ -264,7 +265,7 @@ private void saveCoverageMetricInternal(InputFile file, Metric<?> metric, Defaul
if (previousMeasure != null) { if (previousMeasure != null) {
measureCache.put(file.key(), metric.key(), new DefaultMeasure<String>() measureCache.put(file.key(), metric.key(), new DefaultMeasure<String>()
.forMetric((Metric<String>) metric) .forMetric((Metric<String>) metric)
.withValue(KeyValueFormat.format(mergeCoverageLineMetric(metric, (String) previousMeasure.value(), (String) measure.value())))); .withValue(mergeCoverageLineMetric(metric, (String) previousMeasure.value(), (String) measure.value())));
} else { } else {
measureCache.put(file.key(), metric.key(), measure); measureCache.put(file.key(), metric.key(), measure);
} }
Expand All @@ -278,27 +279,29 @@ private void saveCoverageMetricInternal(InputFile file, Metric<?> metric, Defaul
* Merge the two line coverage data measures. For lines hits use the sum, and for conditions * Merge the two line coverage data measures. For lines hits use the sum, and for conditions
* keep max value in case they both contains a value for the same line. * keep max value in case they both contains a value for the same line.
*/ */
private static Map<Integer, Integer> mergeCoverageLineMetric(Metric<?> metric, String value1, String value2) { static String mergeCoverageLineMetric(Metric<?> metric, String value1, String value2) {
Map<Integer, Integer> data1 = KeyValueFormat.parseIntInt(value1); Map<Integer, Integer> data1 = KeyValueFormat.parseIntInt(value1);
Map<Integer, Integer> data2 = KeyValueFormat.parseIntInt(value2); Map<Integer, Integer> data2 = KeyValueFormat.parseIntInt(value2);
if (metric.key().equals(CoreMetrics.COVERAGE_LINE_HITS_DATA_KEY)) { if (metric.key().equals(CoreMetrics.COVERAGE_LINE_HITS_DATA_KEY)) {
return Stream.of(data1, data2) return KeyValueFormat.format(Stream.of(data1, data2)
.map(Map::entrySet) .map(Map::entrySet)
.flatMap(Collection::stream) .flatMap(Collection::stream)
.collect( .collect(
Collectors.toMap( Collectors.toMap(
Map.Entry::getKey, Map.Entry::getKey,
Map.Entry::getValue, Map.Entry::getValue,
Integer::sum)); Integer::sum,
TreeMap::new)));
} else { } else {
return Stream.of(data1, data2) return KeyValueFormat.format(Stream.of(data1, data2)
.map(Map::entrySet) .map(Map::entrySet)
.flatMap(Collection::stream) .flatMap(Collection::stream)
.collect( .collect(
Collectors.toMap( Collectors.toMap(
Map.Entry::getKey, Map.Entry::getKey,
Map.Entry::getValue, Map.Entry::getValue,
Integer::max)); Integer::max,
TreeMap::new)));
} }
} }


Expand Down
Expand Up @@ -192,4 +192,15 @@ public void shouldValidateMaxLine() throws Exception {
underTest.validateCoverageMeasure(data, file); underTest.validateCoverageMeasure(data, file);
} }


@Test
public void mergeCoverageLineMetrics_should_be_sorted() {
assertThat(DefaultSensorStorage.mergeCoverageLineMetric(CoreMetrics.COVERAGE_LINE_HITS_DATA, "1=1", "1=1")).isEqualTo("1=2");
assertThat(DefaultSensorStorage.mergeCoverageLineMetric(CoreMetrics.COVERAGE_LINE_HITS_DATA, "1=1", "2=1")).isEqualTo("1=1;2=1");
assertThat(DefaultSensorStorage.mergeCoverageLineMetric(CoreMetrics.COVERAGE_LINE_HITS_DATA, "2=1", "1=1")).isEqualTo("1=1;2=1");

assertThat(DefaultSensorStorage.mergeCoverageLineMetric(CoreMetrics.COVERED_CONDITIONS_BY_LINE, "1=1", "1=1")).isEqualTo("1=1");
assertThat(DefaultSensorStorage.mergeCoverageLineMetric(CoreMetrics.COVERED_CONDITIONS_BY_LINE, "1=1", "2=1")).isEqualTo("1=1;2=1");
assertThat(DefaultSensorStorage.mergeCoverageLineMetric(CoreMetrics.COVERED_CONDITIONS_BY_LINE, "2=1", "1=1")).isEqualTo("1=1;2=1");
}

} }

0 comments on commit 8ed37b5

Please sign in to comment.