diff --git a/pom.xml b/pom.xml index a7235123..ef720352 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ edu.hm.hafner codingstyle-pom - 2.0.2 + 2.0.3 @@ -31,7 +31,7 @@ edu.hm.hafner autograding-model - 1.2.1-SNAPSHOT + 1.3.0 edu.hm.hafner @@ -43,7 +43,7 @@ edu.hm.hafner analysis-model - 10.0.0-rc3954.8c8ecf529a7e + 10.0.0-rc3980.fd5b09344558 diff --git a/src/main/java/edu/hm/hafner/grading/AutoGradingAction.java b/src/main/java/edu/hm/hafner/grading/AutoGradingAction.java index 2ebf583b..61d7e84b 100644 --- a/src/main/java/edu/hm/hafner/grading/AutoGradingAction.java +++ b/src/main/java/edu/hm/hafner/grading/AutoGradingAction.java @@ -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; @@ -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 testReports = new TestReportFinder().find(configuration.getTestPattern()); + System.out.println("=================================================================="); + List testReports = new TestReportFinder().find(configuration.getTestPattern()); score.addTestScores(new TestReportSupplier(testReports)); - + System.out.println("=================================================================="); List 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 analysisReports = new ArrayList<>(); List 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 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)); @@ -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; diff --git a/src/main/java/edu/hm/hafner/grading/GradingConfiguration.java b/src/main/java/edu/hm/hafner/grading/GradingConfiguration.java index a6fbb191..8fe138a1 100644 --- a/src/main/java/edu/hm/hafner/grading/GradingConfiguration.java +++ b/src/main/java/edu/hm/hafner/grading/GradingConfiguration.java @@ -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; @@ -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); } @@ -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() { diff --git a/src/main/java/edu/hm/hafner/grading/PitReportFinder.java b/src/main/java/edu/hm/hafner/grading/PitReportFinder.java index dfb24a5a..13ac6323 100644 --- a/src/main/java/edu/hm/hafner/grading/PitReportFinder.java +++ b/src/main/java/edu/hm/hafner/grading/PitReportFinder.java @@ -29,7 +29,8 @@ public List 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() diff --git a/src/main/java/edu/hm/hafner/grading/TestReportFinder.java b/src/main/java/edu/hm/hafner/grading/TestReportFinder.java index 749d7c1e..27f32fab 100644 --- a/src/main/java/edu/hm/hafner/grading/TestReportFinder.java +++ b/src/main/java/edu/hm/hafner/grading/TestReportFinder.java @@ -35,7 +35,7 @@ public List 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() diff --git a/src/test/java/edu/hm/hafner/grading/GradingConfigurationTest.java b/src/test/java/edu/hm/hafner/grading/GradingConfigurationTest.java index 9dba178d..6c822e6a 100644 --- a/src/test/java/edu/hm/hafner/grading/GradingConfigurationTest.java +++ b/src/test/java/edu/hm/hafner/grading/GradingConfigurationTest.java @@ -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"