Skip to content

Commit

Permalink
Added API to merge IC reports (#65)
Browse files Browse the repository at this point in the history
  • Loading branch information
shanshin authored Aug 26, 2024
1 parent e5cd723 commit 7b6595c
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@
package com.intellij.rt.coverage.aggregate.api;

import com.intellij.rt.coverage.aggregate.Aggregator;
import com.intellij.rt.coverage.data.ProjectData;
import com.intellij.rt.coverage.instrumentation.InstrumentationOptions;
import com.intellij.rt.coverage.report.data.BinaryReport;
import com.intellij.rt.coverage.util.CoverageReport;
import com.intellij.rt.coverage.util.ProjectDataLoader;

import java.io.File;
import java.util.ArrayList;
Expand All @@ -36,4 +40,20 @@ public static void aggregate(List<Request> requests, List<File> reports, List<Fi

new Aggregator(binaryReports, outputRoots, requests).processRequests();
}

public static void merge(List<File> reports, File resultReport) {
if (reports.isEmpty()) {
// output file isn't created if no inputs
return;
}
File firstFile = reports.get(0);

ProjectData result = ProjectDataLoader.load(firstFile);
for (int i = 1; i < reports.size(); i++) {
ProjectData report = ProjectDataLoader.load(reports.get(i));
result.merge(report);
}

CoverageReport.save(result, new InstrumentationOptions.Builder().setDataFile(resultReport).build());
}
}
14 changes: 14 additions & 0 deletions reporter/test/com/intellij/rt/coverage/aggregate/AggregatorTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,20 @@ class AggregatorTest {
)
}

@Test
fun testMergeReport() {
val report1 = runTest("", "testData.defaultArgs.TestKt").dataFile
val report2 = runTest("", "testData.branches.TestKt").dataFile

val mergedReport = File.createTempFile("merged", "ic")

AggregatorApi.merge(listOf(report1, report2), mergedReport)

val projectData = ProjectDataLoader.load(mergedReport)
Assert.assertNotNull(projectData.getClassData("testData.defaultArgs.TestKt"))
Assert.assertNotNull(projectData.getClassData("testData.branches.TestKt"))
}

companion object {
private fun createRequests(): List<Request> {
val requests: MutableList<Request> = ArrayList()
Expand Down

0 comments on commit 7b6595c

Please sign in to comment.