From a00462b60d146da4991a937231d9da7c1e57ba4f Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Wed, 14 May 2014 13:02:36 +0200 Subject: [PATCH] SONAR-5285 Return the number of branches and covered branches --- .../sonar/server/test/CoverageService.java | 2 +- .../server/test/ws/CoverageShowAction.java | 25 +++++++---- .../server/test/ws/coverage-example-show.json | 41 +++++++++---------- .../server/test/CoverageServiceTest.java | 2 +- .../test/ws/CoverageShowActionTest.java | 8 +++- .../CoverageShowActionTest/show_coverage.json | 10 ++--- .../show_coverage_with_from_and_to.json | 4 +- 7 files changed, 53 insertions(+), 39 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/test/CoverageService.java b/sonar-server/src/main/java/org/sonar/server/test/CoverageService.java index 24a917f734b..52ff6e42381 100644 --- a/sonar-server/src/main/java/org/sonar/server/test/CoverageService.java +++ b/sonar-server/src/main/java/org/sonar/server/test/CoverageService.java @@ -61,7 +61,7 @@ public class CoverageService implements ServerComponent { */ @CheckForNull public String getConditionsData(String fileKey) { - return findDataFromComponent(fileKey, CoreMetrics.SCM_LAST_COMMIT_DATETIMES_BY_LINE_KEY); + return findDataFromComponent(fileKey, CoreMetrics.CONDITIONS_BY_LINE_KEY); } /** diff --git a/sonar-server/src/main/java/org/sonar/server/test/ws/CoverageShowAction.java b/sonar-server/src/main/java/org/sonar/server/test/ws/CoverageShowAction.java index ef268d9c4b3..cab2d31ef69 100644 --- a/sonar-server/src/main/java/org/sonar/server/test/ws/CoverageShowAction.java +++ b/sonar-server/src/main/java/org/sonar/server/test/ws/CoverageShowAction.java @@ -20,6 +20,7 @@ package org.sonar.server.test.ws; +import com.google.common.collect.Maps; import com.google.common.io.Resources; import org.apache.commons.lang.ObjectUtils; import org.sonar.api.server.ws.Request; @@ -30,8 +31,6 @@ import org.sonar.api.utils.KeyValueFormat; import org.sonar.api.utils.text.JsonWriter; import org.sonar.server.test.CoverageService; -import javax.annotation.Nullable; - import java.util.Map; public class CoverageShowAction implements RequestHandler { @@ -74,7 +73,8 @@ public class CoverageShowAction implements RequestHandler { "
  • IT : Integration Tests
  • " + "
  • OVERALL : Unit and Integration Tests
  • " + "") - .setPossibleValues("UT", "IT", "OVERALL"); + .setPossibleValues("UT", "IT", "OVERALL") + .setDefaultValue("UT"); } @Override @@ -88,16 +88,25 @@ public class CoverageShowAction implements RequestHandler { JsonWriter json = response.newJsonWriter().beginObject(); String hits = coverageService.getHitsData(fileKey); - Map testCasesByLines = coverageService.getTestCasesByLines(fileKey); + Map testCases = coverageService.getTestCasesByLines(fileKey); + String conditions = coverageService.getConditionsData(fileKey); + String coveredConditions = coverageService.getCoveredConditionsData(fileKey); if (hits != null) { Map hitsByLine = KeyValueFormat.parseIntInt(hits); - writeCoverage(fileKey, hitsByLine, testCasesByLines, from, to, json); + Map testCasesByLine = testCases != null ? testCases : Maps.newHashMap(); + Map conditionsByLine = conditions != null ? KeyValueFormat.parseIntInt(conditions) : Maps.newHashMap(); + Map coveredConditionsByLine = coveredConditions != null ? KeyValueFormat.parseIntInt(coveredConditions) : Maps.newHashMap(); + writeCoverage(fileKey, hitsByLine, testCasesByLine, conditionsByLine, coveredConditionsByLine, from, to, json); } json.endObject().close(); } - private void writeCoverage(String fileKey, Map hitsByLine, @Nullable Map testCasesByLines, int from, int to, JsonWriter json) { + private void writeCoverage(String fileKey, Map hitsByLine, + Map testCasesByLines, + Map conditionsByLine, + Map coveredConditionsByLine, + int from, int to, JsonWriter json) { json.name("coverage").beginArray(); for (Map.Entry entry : hitsByLine.entrySet()) { Integer line = entry.getKey(); @@ -106,7 +115,9 @@ public class CoverageShowAction implements RequestHandler { json.beginArray(); json.value(line); json.value(hits > 0); - json.value(testCasesByLines != null ? testCasesByLines.get(line) : null); + json.value(testCasesByLines.get(line)); + json.value(conditionsByLine.get(line)); + json.value(coveredConditionsByLine.get(line)); json.endArray(); } } diff --git a/sonar-server/src/main/resources/org/sonar/server/test/ws/coverage-example-show.json b/sonar-server/src/main/resources/org/sonar/server/test/ws/coverage-example-show.json index 84565edc217..98e9bd39b56 100644 --- a/sonar-server/src/main/resources/org/sonar/server/test/ws/coverage-example-show.json +++ b/sonar-server/src/main/resources/org/sonar/server/test/ws/coverage-example-show.json @@ -1,33 +1,32 @@ { "coverage": [ [ - 36, - 1 + 49, + true, + 14, + null, + null ], [ - 37, - 1 + 50, + true, + 14, + null, + null ], [ - 38, - 1 + 51, + true, + 14, + null, + null ], [ - 39, - 1 - ], - [ - 43, - 1 - ], - [ - 48, - 1 - ], - [ - 53, - 1 + 52, + true, + 14, + null, + null ] ] - } diff --git a/sonar-server/src/test/java/org/sonar/server/test/CoverageServiceTest.java b/sonar-server/src/test/java/org/sonar/server/test/CoverageServiceTest.java index 3a28e1282fb..f9d2c3c6906 100644 --- a/sonar-server/src/test/java/org/sonar/server/test/CoverageServiceTest.java +++ b/sonar-server/src/test/java/org/sonar/server/test/CoverageServiceTest.java @@ -83,7 +83,7 @@ public class CoverageServiceTest { @Test public void get_conditions_data() throws Exception { service.getConditionsData(COMPONENT_KEY); - verify(measureDataDao).findByComponentKeyAndMetricKey(COMPONENT_KEY, CoreMetrics.SCM_LAST_COMMIT_DATETIMES_BY_LINE_KEY); + verify(measureDataDao).findByComponentKeyAndMetricKey(COMPONENT_KEY, CoreMetrics.CONDITIONS_BY_LINE_KEY); } @Test diff --git a/sonar-server/src/test/java/org/sonar/server/test/ws/CoverageShowActionTest.java b/sonar-server/src/test/java/org/sonar/server/test/ws/CoverageShowActionTest.java index a346ac952bd..5da2ea3b625 100644 --- a/sonar-server/src/test/java/org/sonar/server/test/ws/CoverageShowActionTest.java +++ b/sonar-server/src/test/java/org/sonar/server/test/ws/CoverageShowActionTest.java @@ -45,10 +45,12 @@ public class CoverageShowActionTest { } @Test - public void show_coverage() throws Exception { + public void show_coverage_for_unit_test() throws Exception { String fileKey = "src/Foo.java"; when(coverageService.getHitsData(fileKey)).thenReturn("1=1;2=1;3=0;4=1;5=1"); when(coverageService.getTestCasesByLines(fileKey)).thenReturn(ImmutableMap.of(4, 8, 1, 2)); + when(coverageService.getConditionsData(fileKey)).thenReturn("2=3;3=2"); + when(coverageService.getCoveredConditionsData(fileKey)).thenReturn("2=1;3=2"); WsTester.TestRequest request = tester.newGetRequest("api/coverage", "show").setParam("key", fileKey); @@ -56,10 +58,12 @@ public class CoverageShowActionTest { } @Test - public void show_coverage_with_from_and_to() throws Exception { + public void show_coverage_for_unit_test_with_from_and_to() throws Exception { String fileKey = "src/Foo.java"; when(coverageService.getHitsData(fileKey)).thenReturn("1=1;2=1;3=0;4=1;5=1"); when(coverageService.getTestCasesByLines(fileKey)).thenReturn(ImmutableMap.of(4, 8, 1, 2)); + when(coverageService.getConditionsData(fileKey)).thenReturn("2=3;3=2"); + when(coverageService.getCoveredConditionsData(fileKey)).thenReturn("2=1;3=2"); WsTester.TestRequest request = tester.newGetRequest("api/coverage", "show").setParam("key", fileKey).setParam("from", "3").setParam("to", "4"); diff --git a/sonar-server/src/test/resources/org/sonar/server/test/ws/CoverageShowActionTest/show_coverage.json b/sonar-server/src/test/resources/org/sonar/server/test/ws/CoverageShowActionTest/show_coverage.json index 55c59edcc08..8061b1ba524 100644 --- a/sonar-server/src/test/resources/org/sonar/server/test/ws/CoverageShowActionTest/show_coverage.json +++ b/sonar-server/src/test/resources/org/sonar/server/test/ws/CoverageShowActionTest/show_coverage.json @@ -1,9 +1,9 @@ { "coverage": [ - [1, true, 2], - [2, true, null], - [3, false, null], - [4, true, 8], - [5, true, null] + [1, true, 2, null, null], + [2, true, null, 3, 1], + [3, false, null, 2, 2], + [4, true, 8, null, null], + [5, true, null, null, null] ] } diff --git a/sonar-server/src/test/resources/org/sonar/server/test/ws/CoverageShowActionTest/show_coverage_with_from_and_to.json b/sonar-server/src/test/resources/org/sonar/server/test/ws/CoverageShowActionTest/show_coverage_with_from_and_to.json index 65b54b89c09..9bf3ce2e211 100644 --- a/sonar-server/src/test/resources/org/sonar/server/test/ws/CoverageShowActionTest/show_coverage_with_from_and_to.json +++ b/sonar-server/src/test/resources/org/sonar/server/test/ws/CoverageShowActionTest/show_coverage_with_from_and_to.json @@ -1,6 +1,6 @@ { "coverage": [ - [3, false, null], - [4, true, 8], + [3, false, null, 2, 2], + [4, true, 8, null, null] ] } -- 2.39.5