Skip to content

Commit

Permalink
Use new parser registry to obtain analysis parsers.
Browse files Browse the repository at this point in the history
  • Loading branch information
uhafner committed Mar 1, 2021
1 parent 6fea3a9 commit 963c303
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 37 deletions.
6 changes: 3 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>edu.hm.hafner</groupId>
<artifactId>codingstyle-pom</artifactId>
<version>2.0.2</version>
<version>2.0.3</version>
<relativePath/>
</parent>

Expand All @@ -31,7 +31,7 @@
<dependency>
<groupId>edu.hm.hafner</groupId>
<artifactId>autograding-model</artifactId>
<version>1.2.1-SNAPSHOT</version>
<version>1.3.0</version>
<exclusions>
<exclusion>
<groupId>edu.hm.hafner</groupId>
Expand All @@ -43,7 +43,7 @@
<dependency>
<groupId>edu.hm.hafner</groupId>
<artifactId>analysis-model</artifactId>
<version>10.0.0-rc3954.8c8ecf529a7e</version>
<version>10.0.0-rc3980.fd5b09344558</version>
</dependency>

<dependency>
Expand Down
54 changes: 42 additions & 12 deletions src/main/java/edu/hm/hafner/grading/AutoGradingAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -50,32 +51,61 @@ void run() {

JacksonFacade jackson = new JacksonFacade();

System.out.println("Test Configuration: " + jackson.toJson(score.getTestConfiguration()));
System.out.println("Code Coverage Configuration: " + jackson.toJson(score.getCoverageConfiguration()));
System.out.println("PIT Mutation Coverage Configuration: " + jackson.toJson(score.getPitConfiguration()));
AnalysisConfiguration analysisConfiguration = score.getAnalysisConfiguration();
System.out.println("Static Analysis Configuration: " + jackson.toJson(analysisConfiguration));
System.out.println("------------------------------------------------------------------");
System.out.println("------------------------ Configuration ---------------------------");
System.out.println("------------------------------------------------------------------");
System.out.println("-> Test Configuration: " + jackson.toJson(score.getTestConfiguration()));
System.out.println("-> Code Coverage Configuration: " + jackson.toJson(score.getCoverageConfiguration()));
System.out.println("-> PIT Mutation Coverage Configuration: " + jackson.toJson(score.getPitConfiguration()));
System.out.println("-> Static Analysis Configuration: " + jackson.toJson(score.getAnalysisConfiguration()));

GradingConfiguration configuration = new GradingConfiguration(jsonConfiguration);
List<Report> testReports = new TestReportFinder().find(configuration.getTestPattern());

System.out.println("==================================================================");
List<Report> testReports = new TestReportFinder().find(configuration.getTestPattern());
score.addTestScores(new TestReportSupplier(testReports));

System.out.println("==================================================================");
List<Report> pitReports = new PitReportFinder().find();
score.addPitScores(new PitReportSupplier(pitReports));

System.out.println("==================================================================");
if (Files.isReadable(Paths.get(JACOCO_RESULTS))) {
JacocoReport coverageReport = new JacocoParser().parse(new FileReaderFactory(Paths.get(JACOCO_RESULTS)));
score.addCoverageScores(new CoverageReportSupplier(coverageReport));
}
else {
System.out.println("No JaCoCo coverage result files found!");
}
System.out.println("==================================================================");
ReportFinder reportFinder = new ReportFinder();
ParserRegistry registry = new ParserRegistry();

String[] tools = {CHECKSTYLE, PMD, SPOTBUGS};
List<Report> analysisReports = new ArrayList<>();
List<AnalysisScore> analysisScores = new ArrayList<>();

for (String tool : tools) {
ParserDescriptor parser = registry.get(tool);
Report report = parse(configuration, parser);
analysisReports.add(report);
analysisScores.add(createAnalysisScore(analysisConfiguration, parser.getName(), parser.getId(), report));
List<Path> files = reportFinder.find("target", "glob:" + parser.getPattern());
System.out.format("Searching for '%s' results matching file name pattern %s%n", parser.getName(), parser.getPattern());

if (files.size() == 0) {
System.out.println("No matching report result files found!");
}
else {
Collections.sort(files);

for (Path file : files) {
Report allIssues = parser.createParser().parse(new FileReaderFactory(file));
Report filteredIssues = filterAnalysisReport(allIssues, configuration.getAnalysisPattern());
System.out.format("- %s : %d warnings (from total %d)%n", file, filteredIssues.size(), allIssues.size());
analysisReports.add(filteredIssues);
analysisScores.add(createAnalysisScore(score.getAnalysisConfiguration(), parser.getName(),
parser.getId(), filteredIssues));
}
}
}
score.addAnalysisScores(new AnalysisReportSupplier(analysisScores));
System.out.println("==================================================================");

if (Files.isReadable(Paths.get(JACOCO_RESULTS))) {
JacocoReport coverageReport = new JacocoParser().parse(read(JACOCO_RESULTS));
Expand All @@ -97,7 +127,7 @@ void run() {
private String createAffectedFiles(final GradingConfiguration configuration) {
String analysisPattern = configuration.getAnalysisPattern();
if (StringUtils.isNotBlank(analysisPattern) && !StringUtils.equals(analysisPattern,
GradingConfiguration.ALL_FILES)) {
GradingConfiguration.INCLUDE_ALL_FILES)) {
return "\n" + new ReportFinder().renderLinks("./", "regex:" + analysisPattern);
}
return StringUtils.EMPTY;
Expand Down
22 changes: 11 additions & 11 deletions src/main/java/edu/hm/hafner/grading/GradingConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
* @author Ullrich Hafner
*/
public class GradingConfiguration {
static final String SUREFIRE_REPORT_PATTERN = "glob:./target/surefire-reports/*.xml";
static final String ALL_FILES = ".*";
static final String SUREFIRE_DEFAULT_PATTERN = "./target/surefire-reports/*.xml";
static final String INCLUDE_ALL_FILES = ".*";

private final String testPattern;
private final String analysisPattern;
Expand All @@ -22,20 +22,20 @@ public class GradingConfiguration {
ObjectMapper mapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

testPattern = asString(configuration, mapper, "tests", SUREFIRE_REPORT_PATTERN);
System.out.println("Using test file pattern: " + testPattern);
testPattern = asString(configuration, mapper, "tests", "pattern", SUREFIRE_DEFAULT_PATTERN);
System.out.println("-> Using test files pattern: " + testPattern);

analysisPattern = asString(configuration, mapper, "analysis", ALL_FILES);
System.out.println("Using analysis file pattern: " + analysisPattern);
analysisPattern = asString(configuration, mapper, "analysis", "fileFilter", INCLUDE_ALL_FILES);
System.out.println("-> Using file name filter (include) for static analysis: " + analysisPattern);
}

private String asString(final String configuration, final ObjectMapper mapper, final String type,
final String defaultValue) {
final String propertyName, final String defaultValue) {
try {
ObjectNode node = mapper.readValue(configuration, ObjectNode.class);
JsonNode tests = node.get(type);
if (tests != null) {
JsonNode pattern = tests.get("pattern");
JsonNode typeNode = node.get(type);
if (typeNode != null) {
JsonNode pattern = typeNode.get(propertyName);
if (pattern != null) {
return pattern.asText(defaultValue);
}
Expand All @@ -48,7 +48,7 @@ private String asString(final String configuration, final ObjectMapper mapper, f
}

public String getTestPattern() {
return testPattern;
return "glob:" + testPattern;
}

public String getAnalysisPattern() {
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/edu/hm/hafner/grading/PitReportFinder.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ public List<Report> find() {
}

System.out.println("Reading PIT results: ");
System.out.println(reportFiles);
Collections.sort(reportFiles);
reportFiles.forEach(file -> System.out.format("- %s%n", file));

PitAdapter parser = new PitAdapter();
return reportFiles.stream()
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/edu/hm/hafner/grading/TestReportFinder.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public List<Report> find(final String pattern) {

Collections.sort(reportFiles);
System.out.println("Reading test results: ");
System.out.println(reportFiles);
reportFiles.forEach(file -> System.out.format("- %s%n", file));

JUnitAdapter parser = new JUnitAdapter();
return reportFiles.stream()
Expand Down
20 changes: 11 additions & 9 deletions src/test/java/edu/hm/hafner/grading/GradingConfigurationTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,38 +10,40 @@
* @author Ullrich Hafner
*/
class GradingConfigurationTest {
private static final String DEFAULT_PATTERN = "glob:" + GradingConfiguration.SUREFIRE_DEFAULT_PATTERN;

@Test
void shouldReturnDefaultPattern() {
assertThat(new GradingConfiguration(
"{ \"tests\": {\"maxScore\":5,\"failureImpact\":1,\"passedImpact\":2,\"skippedImpact\":3}}")
.getTestPattern()).isEqualTo(GradingConfiguration.SUREFIRE_REPORT_PATTERN);
.getTestPattern()).isEqualTo(DEFAULT_PATTERN);
assertThat(new GradingConfiguration("{ \"tests\": {}}").getTestPattern()).isEqualTo(
GradingConfiguration.SUREFIRE_REPORT_PATTERN);
DEFAULT_PATTERN);

assertThat(new GradingConfiguration("{}").getTestPattern()).isEqualTo(
GradingConfiguration.SUREFIRE_REPORT_PATTERN);
DEFAULT_PATTERN);
assertThat(new GradingConfiguration("").getTestPattern()).isEqualTo(
GradingConfiguration.SUREFIRE_REPORT_PATTERN);
DEFAULT_PATTERN);
assertThat(new GradingConfiguration("<[+").getTestPattern()).isEqualTo(
GradingConfiguration.SUREFIRE_REPORT_PATTERN);
DEFAULT_PATTERN);
assertThat(new GradingConfiguration("<[+").getTestPattern()).isEqualTo(
GradingConfiguration.SUREFIRE_REPORT_PATTERN);
DEFAULT_PATTERN);

assertThat(new GradingConfiguration("<[+").getAnalysisPattern()).isEqualTo(GradingConfiguration.ALL_FILES);
assertThat(new GradingConfiguration("<[+").getAnalysisPattern()).isEqualTo(GradingConfiguration.INCLUDE_ALL_FILES);
}

@Test
void shouldReturnProvidedTestPattern() {
assertThat(new GradingConfiguration(
"{ \"tests\": {\"pattern\":\"*/*.xml\", \"maxScore\":5,\"failureImpact\":1,\"passedImpact\":2,\"skippedImpact\":3}}")
.getTestPattern()).isEqualTo("*/*.xml");
.getTestPattern()).isEqualTo("glob:*/*.xml");
}

@Test
void shouldReturnProvidedAnalysisPattern() {
assertThat(new GradingConfiguration("{\n"
+ " \"analysis\": {\n"
+ " \"pattern\": \"File.*\",\n"
+ " \"fileFilter\": \"File.*\",\n"
+ " \"maxScore\": 100,\n"
+ " \"errorImpact\": -5,\n"
+ " \"highImpact\": -3,\n"
Expand Down

0 comments on commit 963c303

Please sign in to comment.