Skip to content

Commit

Permalink
Multiple class dirs support for coverage APIs (#104)
Browse files Browse the repository at this point in the history
Signed-off-by: André Silva <andre15andre@hotmail.com>
  • Loading branch information
andre15silva committed Jul 17, 2021
1 parent 02f4d94 commit 0e602d5
Show file tree
Hide file tree
Showing 41 changed files with 506 additions and 419 deletions.
165 changes: 111 additions & 54 deletions src/main/java/eu/stamp_project/testrunner/EntryPoint.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import org.jacoco.core.data.ExecutionDataStore;

import java.util.List;

/**
* Something that is able to receive a ExecutionDataStore from Jacoco
* and transform it into a {@link Coverage} object.
*/
public interface CoverageTransformer {
public Coverage transformJacocoObject(ExecutionDataStore executionData, String classesDirectory);
public Coverage transformJacocoObject(ExecutionDataStore executionData, List<String> classesDirectory);

}
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
package eu.stamp_project.testrunner.listener.impl;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import eu.stamp_project.testrunner.listener.CoverageTransformer;
import org.jacoco.core.analysis.Analyzer;
import org.jacoco.core.analysis.CoverageBuilder;
import org.jacoco.core.analysis.IClassCoverage;
import org.jacoco.core.analysis.IMethodCoverage;
import org.jacoco.core.data.ExecutionDataStore;
import eu.stamp_project.testrunner.listener.Coverage;
import eu.stamp_project.testrunner.listener.CoverageTransformer;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* One implementation of {@link CoverageTransformer} that returns a {@link CoverageDetailed}.
Expand All @@ -20,17 +21,15 @@ public class CoverageCollectorDetailed implements CoverageTransformer {
private static final long serialVersionUID = 109548359596802378L;

@Override
public CoverageDetailed transformJacocoObject(ExecutionDataStore executionData, String classesDirectory) {
public CoverageDetailed transformJacocoObject(ExecutionDataStore executionData, List<String> classesDirectory) {

CoverageInformation covered = new CoverageInformation();

final CoverageBuilder coverageBuilder = new CoverageBuilder();
final Analyzer analyzer = new Analyzer(executionData, coverageBuilder);
try {
//TODO: change the interface to an array of URL
String[] paths = classesDirectory.split(File.pathSeparator);
for (String path : paths) {
analyzer.analyzeAll(new File(path));
for (String directory : classesDirectory) {
analyzer.analyzeAll(new File(directory));
}
} catch (IOException e) {
throw new RuntimeException(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,22 @@
import org.jacoco.core.analysis.*;
import org.jacoco.core.data.ExecutionDataStore;

import java.io.*;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class CoverageCollectorMethodDetailed implements CoverageTransformer {
@Override
public Coverage transformJacocoObject(ExecutionDataStore executionData, String classesDirectory) {
public Coverage transformJacocoObject(ExecutionDataStore executionData, List<String> classesDirectory) {
final CoverageBuilder coverageBuilder = new CoverageBuilder();
final Analyzer analyzer = new Analyzer(executionData, coverageBuilder);
try {
analyzer.analyzeAll(new File(classesDirectory));
for (String directory : classesDirectory) {
analyzer.analyzeAll(new File(directory));
}
} catch (IOException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
import org.jacoco.core.analysis.*;
import org.jacoco.core.data.ExecutionDataStore;

import java.io.*;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;
Expand Down Expand Up @@ -44,11 +45,13 @@ public static List<Integer> getListOfCountForCounterFunction(IClassCoverage cove


@Override
public Coverage transformJacocoObject(ExecutionDataStore executionData, String classesDirectory) {
public Coverage transformJacocoObject(ExecutionDataStore executionData, List<String> classesDirectory) {
final CoverageBuilder coverageBuilder = new CoverageBuilder();
final Analyzer analyzer = new Analyzer(executionData, coverageBuilder);
try {
analyzer.analyzeAll(new File(classesDirectory));
for (String directory : classesDirectory) {
analyzer.analyzeAll(new File(directory));
}
} catch (IOException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

Expand All @@ -28,7 +29,7 @@ public class CoveragePerTestMethodImpl implements CoveragePerTestMethod {

protected final Map<String, Coverage> coverageResultsMap;

protected final String classesDirectory;
protected final List<String> classesDirectory;

protected transient RuntimeData data;

Expand All @@ -44,14 +45,14 @@ public CoveragePerTestMethodImpl() {
this.coverageTransformer = new CoverageCollectorSummarization();
}

public CoveragePerTestMethodImpl(RuntimeData data, String classesDirectory, CoverageTransformer coverageTransformer) {
public CoveragePerTestMethodImpl(RuntimeData data, List<String> classesDirectory, CoverageTransformer coverageTransformer) {
this.data = data;
this.classesDirectory = classesDirectory;
this.coverageResultsMap = new HashMap<>();
this.coverageTransformer = coverageTransformer;
}

public String getClassesDirectory() {
public List<String> getClassesDirectory() {
return classesDirectory;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class CoveredTestResultPerTestMethodImpl implements CoveredTestResultPerT

protected final Map<String, Coverage> coverageResultsMap;

protected final String classesDirectory;
protected final List<String> classesDirectory;

protected transient RuntimeData data;

Expand All @@ -46,7 +46,7 @@ public class CoveredTestResultPerTestMethodImpl implements CoveredTestResultPerT
private List<Failure> assumptionFailingTests;
private List<String> ignoredTests;

public CoveredTestResultPerTestMethodImpl(RuntimeData data, String classesDirectory, CoverageTransformer coverageTransformer) {
public CoveredTestResultPerTestMethodImpl(RuntimeData data, List<String> classesDirectory, CoverageTransformer coverageTransformer) {
this.data = data;
this.classesDirectory = classesDirectory;
this.coverageResultsMap = new HashMap<>();
Expand All @@ -58,7 +58,7 @@ public CoveredTestResultPerTestMethodImpl(RuntimeData data, String classesDirect

}

public String getClassesDirectory() {
public List<String> getClassesDirectory() {
return classesDirectory;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,23 @@
import eu.stamp_project.testrunner.listener.Coverage;
import eu.stamp_project.testrunner.listener.CoveragePerTestMethod;
import eu.stamp_project.testrunner.listener.CoverageTransformer;
import eu.stamp_project.testrunner.listener.impl.CoverageCollectorSummarization;
import eu.stamp_project.testrunner.listener.impl.CoverageImpl;
import eu.stamp_project.testrunner.listener.impl.CoveragePerTestMethodImpl;
import org.jacoco.core.analysis.*;
import org.jacoco.core.analysis.Analyzer;
import org.jacoco.core.analysis.CoverageBuilder;
import org.jacoco.core.analysis.IClassCoverage;
import org.jacoco.core.analysis.ICounter;
import org.jacoco.core.data.ExecutionDataStore;
import org.jacoco.core.data.SessionInfoStore;
import org.jacoco.core.runtime.RuntimeData;
import org.junit.runner.Description;

import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

Expand All @@ -44,7 +46,7 @@ public class CoveragePerJUnit4TestMethod extends JUnit4TestResult implements Cov
*/
private Map<String, List<IClassCoverage>> coveragesPerMethodName;

public CoveragePerJUnit4TestMethod(RuntimeData data, String classesDirectory, CoverageTransformer coverageTransformer) {
public CoveragePerJUnit4TestMethod(RuntimeData data, List<String> classesDirectory, CoverageTransformer coverageTransformer) {
this.internalCoverage = new CoveragePerTestMethodImpl(data, classesDirectory, coverageTransformer);
this.coveragesPerMethodName = new HashMap<>();
}
Expand All @@ -70,8 +72,10 @@ public synchronized void testFinished(Description description) throws Exception
);

Coverage jUnit4Coverage =
internalCoverage.getCoverageTransformer().transformJacocoObject(this.internalCoverage.getExecutionData(),
this.internalCoverage.getClassesDirectory());
internalCoverage.getCoverageTransformer().transformJacocoObject(
this.internalCoverage.getExecutionData(),
this.internalCoverage.getClassesDirectory()
);
this.internalCoverage.getCoverageResultsMap().put(this.toString.apply(description), jUnit4Coverage);
if (isParametrized.test(description.getMethodName())) {
this.collectForParametrizedTest(this.toStringParametrized.apply(description));
Expand All @@ -82,7 +86,9 @@ private void collectForParametrizedTest(String testMethodName) {
final CoverageBuilder coverageBuilder = new CoverageBuilder();
final Analyzer analyzer = new Analyzer(this.internalCoverage.getExecutionData(), coverageBuilder);
try {
analyzer.analyzeAll(new File(this.internalCoverage.getClassesDirectory()));
for (String directory : this.internalCoverage.getClassesDirectory()) {
analyzer.analyzeAll(new File(directory));
}
} catch (IOException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
import org.jacoco.core.data.ExecutionDataStore;
import org.jacoco.core.data.SessionInfoStore;
import org.jacoco.core.runtime.RuntimeData;
import org.junit.platform.engine.support.descriptor.MethodSource;
import org.junit.platform.launcher.TestIdentifier;
import org.junit.runner.Description;

import java.io.File;
Expand All @@ -24,9 +22,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

Expand All @@ -51,7 +46,7 @@ public class CoveredTestResultsPerJUnit4TestMethod extends JUnit4TestResult impl
*/
private Map<String, List<IClassCoverage>> coveragesPerMethodName;

public CoveredTestResultsPerJUnit4TestMethod(RuntimeData data, String classesDirectory, CoverageTransformer coverageTransformer) {
public CoveredTestResultsPerJUnit4TestMethod(RuntimeData data, List<String> classesDirectory, CoverageTransformer coverageTransformer) {
this.internalCoveredTestResult = new CoveredTestResultPerTestMethodImpl(data, classesDirectory, coverageTransformer);
this.coveragesPerMethodName = new HashMap<>();
}
Expand Down Expand Up @@ -79,8 +74,10 @@ public synchronized void testFinished(Description description) throws Exception
);

Coverage jUnit4Coverage =
internalCoveredTestResult.getCoverageTransformer().transformJacocoObject(this.internalCoveredTestResult.getExecutionData(),
this.internalCoveredTestResult.getClassesDirectory());
internalCoveredTestResult.getCoverageTransformer().transformJacocoObject(
this.internalCoveredTestResult.getExecutionData(),
this.internalCoveredTestResult.getClassesDirectory()
);
this.internalCoveredTestResult.getCoverageResultsMap().put(this.toString.apply(description), jUnit4Coverage);
if (isParametrized.test(description.getMethodName())) {
this.collectForParametrizedTest(this.toStringParametrized.apply(description));
Expand Down Expand Up @@ -118,7 +115,9 @@ private void collectForParametrizedTest(String testMethodName) {
final CoverageBuilder coverageBuilder = new CoverageBuilder();
final Analyzer analyzer = new Analyzer(this.internalCoveredTestResult.getExecutionData(), coverageBuilder);
try {
analyzer.analyzeAll(new File(this.internalCoveredTestResult.getClassesDirectory()));
for (String directory : this.internalCoveredTestResult.getClassesDirectory()) {
analyzer.analyzeAll(new File(directory));
}
} catch (IOException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import eu.stamp_project.testrunner.listener.Coverage;
import eu.stamp_project.testrunner.listener.CoveragePerTestMethod;
import eu.stamp_project.testrunner.listener.CoverageTransformer;
import eu.stamp_project.testrunner.listener.impl.CoverageCollectorSummarization;
import eu.stamp_project.testrunner.listener.impl.CoveragePerTestMethodImpl;
import eu.stamp_project.testrunner.runner.Failure;
import org.jacoco.core.data.ExecutionDataStore;
Expand All @@ -12,6 +11,7 @@
import org.junit.platform.engine.TestExecutionResult;
import org.junit.platform.launcher.TestIdentifier;

import java.util.List;
import java.util.Map;

/**
Expand All @@ -28,7 +28,7 @@ public class CoveragePerJUnit5TestMethod extends JUnit5TestResult implements Cov
private CoveragePerTestMethodImpl internalCoverage;


public CoveragePerJUnit5TestMethod(RuntimeData data, String classesDirectory, CoverageTransformer coverageTransformer) {
public CoveragePerJUnit5TestMethod(RuntimeData data, List<String> classesDirectory, CoverageTransformer coverageTransformer) {
this.internalCoverage = new CoveragePerTestMethodImpl(data, classesDirectory, coverageTransformer);
}

Expand Down Expand Up @@ -57,8 +57,10 @@ public synchronized void executionFinished(TestIdentifier testIdentifier, TestEx
);

Coverage jUnit5Coverage =
internalCoverage.getCoverageTransformer().transformJacocoObject(this.internalCoverage.getExecutionData(),
this.internalCoverage.getClassesDirectory());
internalCoverage.getCoverageTransformer().transformJacocoObject(
this.internalCoverage.getExecutionData(),
this.internalCoverage.getClassesDirectory()
);
this.internalCoverage.getCoverageResultsMap().put(this.toString.apply(testIdentifier), jUnit5Coverage);
switch (testExecutionResult.getStatus()) {
case FAILED:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.junit.platform.engine.support.descriptor.MethodSource;
import org.junit.platform.launcher.TestIdentifier;

import java.util.List;
import java.util.Map;
import java.util.function.Function;

Expand All @@ -26,7 +27,7 @@ public class CoveredTestResultsPerJUnit5TestMethod extends JUnit5TestResult impl

private CoveredTestResultPerTestMethodImpl internalCoveredTestResult;

public CoveredTestResultsPerJUnit5TestMethod(RuntimeData data, String classesDirectory, CoverageTransformer coverageTransformer) {
public CoveredTestResultsPerJUnit5TestMethod(RuntimeData data, List<String> classesDirectory, CoverageTransformer coverageTransformer) {
this.internalCoveredTestResult = new CoveredTestResultPerTestMethodImpl(data, classesDirectory, coverageTransformer);
}

Expand Down Expand Up @@ -62,8 +63,10 @@ public synchronized void executionFinished(TestIdentifier testIdentifier, TestEx
);

Coverage jUnit5Coverage =
internalCoveredTestResult.getCoverageTransformer().transformJacocoObject(this.internalCoveredTestResult.getExecutionData(),
this.internalCoveredTestResult.getClassesDirectory());
internalCoveredTestResult.getCoverageTransformer().transformJacocoObject(
this.internalCoveredTestResult.getExecutionData(),
this.internalCoveredTestResult.getClassesDirectory()
);
this.internalCoveredTestResult.getCoverageResultsMap().put(this.toString.apply(testIdentifier), jUnit5Coverage);
switch (testExecutionResult.getStatus()) {
case FAILED:
Expand Down
Loading

0 comments on commit 0e602d5

Please sign in to comment.