@Test public void singleReport() throws IOException { File baseDir = temp.getRoot(); File srcDir = new File(baseDir, "src"); srcDir.mkdir(); File xooFile = new File(srcDir, "sample.xoo"); File xooUtCoverageFile = new File(srcDir, "sample.xoo.coverage"); FileUtils.write(xooFile, "function foo() {\n if (a && b) {\nalert('hello');\n}\n}", StandardCharsets.UTF_8); FileUtils.write(xooUtCoverageFile, "2:2:2:1\n3:1", StandardCharsets.UTF_8); AnalysisResult result = tester.newAnalysis() .properties(ImmutableMap.<String, String>builder() .put("sonar.projectBaseDir", baseDir.getAbsolutePath()) .put("sonar.projectKey", "com.foo.project") .put("sonar.sources", "src") .build()) .execute(); InputFile file = result.inputFile("src/sample.xoo"); assertThat(result.coverageFor(file, 2).getHits()).isTrue(); assertThat(result.coverageFor(file, 2).getConditions()).isEqualTo(2); assertThat(result.coverageFor(file, 2).getCoveredConditions()).isEqualTo(1); Map<String, List<org.sonar.scanner.protocol.output.ScannerReport.Measure>> allMeasures = result.allMeasures(); assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey", "intValue.value") .contains(tuple(CoreMetrics.LINES_TO_COVER_KEY, 2), tuple(CoreMetrics.UNCOVERED_LINES_KEY, 0), tuple(CoreMetrics.CONDITIONS_TO_COVER_KEY, 2), tuple(CoreMetrics.UNCOVERED_CONDITIONS_KEY, 1)); }
@Test public void fallbackOnExecutableLines() throws IOException { File baseDir = temp.getRoot(); File srcDir = new File(baseDir, "src"); srcDir.mkdir(); File xooFile = new File(srcDir, "sample.xoo"); File measuresFile = new File(srcDir, "sample.xoo.measures"); FileUtils.write(xooFile, "function foo() {\n if (a && b) {\nalert('hello');\n}\n}", StandardCharsets.UTF_8); FileUtils.write(measuresFile, "executable_lines_data:2=1;3=1;4=0", StandardCharsets.UTF_8); AnalysisResult result = tester.newAnalysis() .properties(ImmutableMap.<String, String>builder() .put("sonar.projectBaseDir", baseDir.getAbsolutePath()) .put("sonar.projectKey", "com.foo.project") .put("sonar.sources", "src") .build()) .execute(); InputFile file = result.inputFile("src/sample.xoo"); assertThat(result.coverageFor(file, 1)).isNull(); assertThat(result.coverageFor(file, 2).getHits()).isFalse(); assertThat(result.coverageFor(file, 2).getConditions()).isEqualTo(0); assertThat(result.coverageFor(file, 2).getCoveredConditions()).isEqualTo(0); assertThat(result.coverageFor(file, 3).getHits()).isFalse(); assertThat(result.coverageFor(file, 4)).isNull(); Map<String, List<org.sonar.scanner.protocol.output.ScannerReport.Measure>> allMeasures = result.allMeasures(); assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey", "intValue.value") .contains(tuple(CoreMetrics.LINES_TO_COVER_KEY, 2), tuple(CoreMetrics.UNCOVERED_LINES_KEY, 2)); assertThat(allMeasures.get("com.foo.project:src/sample.xoo")).extracting("metricKey").doesNotContain(CoreMetrics.CONDITIONS_TO_COVER_KEY, CoreMetrics.UNCOVERED_CONDITIONS_KEY); }
assertThat(result.coverageFor(file, 2).getConditions()).isEqualTo(2); assertThat(result.coverageFor(file, 2).getCoveredConditions()).isEqualTo(2); assertThat(result.coverageFor(file, 3).getHits()).isTrue();
private static void processCoverage(DbFileSources.Line.Builder lineBuilder, ScannerReport.LineCoverage reportCoverage) { if (reportCoverage.getHasHitsCase() == HasHitsCase.HITS) { lineBuilder.setLineHits(reportCoverage.getHits() ? 1 : 0); } if (reportCoverage.getHasCoveredConditionsCase() == HasCoveredConditionsCase.COVERED_CONDITIONS) { lineBuilder.setConditions(reportCoverage.getConditions()); lineBuilder.setCoveredConditions(reportCoverage.getCoveredConditions()); } }
assertThat(result.coverageFor(file1, 2).getConditions()).isEqualTo(0); assertThat(result.coverageFor(file1, 2).getCoveredConditions()).isEqualTo(0);
assertThat(result.coverageFor(noConditions, 6).getConditions()).isEqualTo(0); assertThat(result.coverageFor(noConditions, 6).getCoveredConditions()).isEqualTo(0); assertThat(result.coverageFor(withConditions, 3).getConditions()).isEqualTo(2); assertThat(result.coverageFor(withConditions, 3).getCoveredConditions()).isEqualTo(2);
assertThat(result.coverageFor(noConditions, 6).getConditions()).isEqualTo(0); assertThat(result.coverageFor(noConditions, 6).getCoveredConditions()).isEqualTo(0); assertThat(result.coverageFor(withConditions, 3).getConditions()).isEqualTo(2); assertThat(result.coverageFor(withConditions, 3).getCoveredConditions()).isEqualTo(1);
@Test public void read_coverage() { ScannerReportWriter writer = new ScannerReportWriter(dir); writer.writeMetadata(ScannerReport.Metadata.newBuilder() .setRootComponentRef(1) .build()); writer.writeComponent(ScannerReport.Component.newBuilder() .setRef(1).build()); writer.writeComponentCoverage(1, asList( ScannerReport.LineCoverage.newBuilder() .setLine(1) .setConditions(1) .setHits(true) .setCoveredConditions(1) .build(), ScannerReport.LineCoverage.newBuilder() .setLine(2) .setConditions(5) .setHits(false) .setCoveredConditions(4) .build())); underTest = new ScannerReportReader(dir); try (CloseableIterator<ScannerReport.LineCoverage> it = new ScannerReportReader(dir).readComponentCoverage(1)) { ScannerReport.LineCoverage coverage = it.next(); assertThat(coverage.getLine()).isEqualTo(1); assertThat(coverage.getConditions()).isEqualTo(1); assertThat(coverage.getHits()).isTrue(); assertThat(coverage.getCoveredConditions()).isEqualTo(1); } }
private static void processCoverage(DbFileSources.Line.Builder lineBuilder, ScannerReport.LineCoverage reportCoverage) { if (reportCoverage.getHasHitsCase() == HasHitsCase.HITS) { lineBuilder.setLineHits(reportCoverage.getHits() ? 1 : 0); } if (reportCoverage.getHasCoveredConditionsCase() == HasCoveredConditionsCase.COVERED_CONDITIONS) { lineBuilder.setConditions(reportCoverage.getConditions()); lineBuilder.setCoveredConditions(reportCoverage.getCoveredConditions()); } }