Skip to content

Commit 5833b94

Browse files
committed
The jqwik report now shows inline instead of being at the end of the log
1 parent e9d8391 commit 5833b94

File tree

6 files changed

+45
-38
lines changed

6 files changed

+45
-38
lines changed

src/main/java/nl/tudelft/cse1110/grader/GraderRunner.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,16 @@ public static void main(String[] args) {
1616
CheckScript codeCheckerScript = new CheckScript(Arrays.asList(new SingleCheck("TestMethodsHaveAssertions")));
1717

1818
DefaultConfiguration cfg = new DefaultConfiguration(
19-
"/Users/mauricioaniche/education/cse1110/test/code",
20-
"/Users/mauricioaniche/education/cse1110/test/libs",
21-
"/Users/mauricioaniche/education/cse1110/test/reports",
19+
"E:\\TUDelft\\CSE1110 Summer\\code",
20+
"E:\\TUDelft\\CSE1110 Summer\\libs",
21+
"E:\\TUDelft\\CSE1110 Summer\\reports",
2222
codeCheckerScript
2323
);
2424

2525
ResultBuilder result = new ResultBuilder();
2626

27-
result.startCapturingConsole();
28-
2927
ExecutionFlow flow = ExecutionFlow.fullMode(cfg, result);
3028
flow.run();
31-
result.stopCapturingConsole();
3229

3330
System.out.println(result.buildDebugResult());
3431
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package nl.tudelft.cse1110.grader.execution;
2+
3+
import nl.tudelft.cse1110.grader.result.ResultBuilder;
4+
import org.junit.platform.engine.reporting.ReportEntry;
5+
import org.junit.platform.launcher.TestExecutionListener;
6+
import org.junit.platform.launcher.TestIdentifier;
7+
8+
public class AdditionalReportJUnitListener implements TestExecutionListener {
9+
10+
private ResultBuilder result;
11+
12+
public AdditionalReportJUnitListener(ResultBuilder result) {
13+
this.result = result;
14+
}
15+
16+
@Override
17+
public void reportingEntryPublished(TestIdentifier testIdentifier, ReportEntry entry) {
18+
this.result.logAdditionalReport(testIdentifier, entry);
19+
}
20+
}

src/main/java/nl/tudelft/cse1110/grader/execution/step/RunJUnitTests.java

+5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import nl.tudelft.cse1110.grader.config.Configuration;
55
import nl.tudelft.cse1110.grader.execution.ExecutionStep;
66
import nl.tudelft.cse1110.grader.result.ResultBuilder;
7+
import nl.tudelft.cse1110.grader.execution.AdditionalReportJUnitListener;
78
import org.junit.platform.launcher.Launcher;
89
import org.junit.platform.launcher.LauncherDiscoveryRequest;
910
import org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder;
@@ -18,13 +19,17 @@ public class RunJUnitTests implements ExecutionStep {
1819
public void execute(Configuration cfg, ResultBuilder result) {
1920
try {
2021
SummaryGeneratingListener listener = new SummaryGeneratingListener();
22+
AdditionalReportJUnitListener additionalReportJUnitListener = new AdditionalReportJUnitListener(result);
23+
2124
String testClass = ClassUtils.getTestClass(cfg.getNewClassNames());
2225

2326
Launcher launcher = LauncherFactory.create();
2427
launcher.registerTestExecutionListeners(listener);
28+
launcher.registerTestExecutionListeners(additionalReportJUnitListener);
2529

2630
LauncherDiscoveryRequest request = LauncherDiscoveryRequestBuilder.request()
2731
.selectors(selectClass(testClass))
32+
.configurationParameter("jqwik.reporting.usejunitplatform", "true")
2833
.build();
2934
launcher.execute(request);
3035

src/main/java/nl/tudelft/cse1110/grader/result/ResultBuilder.java

+16-29
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,15 @@
77
import org.junit.platform.engine.UniqueId;
88
import org.junit.platform.engine.reporting.ReportEntry;
99
import org.junit.platform.launcher.TestExecutionListener;
10+
import org.junit.platform.launcher.TestIdentifier;
1011
import org.junit.platform.launcher.listeners.TestExecutionSummary;
1112
import org.pitest.mutationtest.tooling.CombinedStatistics;
1213

1314
import javax.tools.Diagnostic;
1415
import javax.tools.JavaFileObject;
1516
import java.io.*;
1617
import java.time.LocalDateTime;
17-
import java.util.InputMismatchException;
18-
import java.util.List;
19-
import java.util.Set;
18+
import java.util.*;
2019

2120
import static javax.tools.Diagnostic.Kind.ERROR;
2221

@@ -25,28 +24,7 @@ public class ResultBuilder {
2524
private boolean failed;
2625
private StringBuilder result = new StringBuilder();
2726
private StringBuilder debug = new StringBuilder();
28-
private StringBuilder consoleOutput = new StringBuilder();
29-
private OutputStream outputStream;
30-
private PrintStream console;
31-
32-
public ResultBuilder() {
33-
this.console = System.out;
34-
35-
this.outputStream = new OutputStream() {
36-
@Override
37-
public void write(int b) throws IOException {
38-
consoleOutput.append((char)b);
39-
}
40-
};
41-
}
42-
43-
public void startCapturingConsole() {
44-
System.setOut(new PrintStream(this.outputStream));
45-
}
46-
47-
public void stopCapturingConsole() {
48-
System.setOut(this.console);
49-
}
27+
private Map<TestIdentifier, ReportEntry> additionalReports = new HashMap<>();
5028

5129
public void compilationFail(List<Diagnostic<? extends JavaFileObject>> diagnostics) {
5230
l("We could not compile your code. See the compilation errors below:");
@@ -120,23 +98,32 @@ public void logJUnitRun(TestExecutionSummary summary) {
12098
failed();
12199
}
122100

101+
public void logAdditionalReport(TestIdentifier testIdentifier, ReportEntry report) {
102+
this.additionalReports.put(testIdentifier, report);
103+
}
104+
123105
private void logJUnitFailedTest(TestExecutionSummary.Failure failure) {
124106
UniqueId.Segment lastSegment = failure.getTestIdentifier().getUniqueIdObject().getLastSegment();
125107

126108
switch (lastSegment.getType()) {
127109
case "test-template-invocation" -> {
128110
String methodName = this.getParameterizedMethodName(failure);
129111
l(String.format("\n- Parameterized test \"%s\", test case %s failed:", methodName, lastSegment.getValue()));
112+
l(String.format("%s", failure.getException()));
130113
}
131114
case "property" -> {
132-
l(String.format("\n- Property test \"%s\" failed (see full output below for more info):", failure.getTestIdentifier().getDisplayName()));
115+
l(String.format("\n- Property test \"%s\" failed:", failure.getTestIdentifier().getDisplayName()));
116+
l(String.format("%s", failure.getException()));
117+
118+
if (this.additionalReports.containsKey(failure.getTestIdentifier())) {
119+
l(this.additionalReports.get(failure.getTestIdentifier()).getKeyValuePairs().toString());
120+
}
133121
}
134122
default -> {
135123
l(String.format("\n- Test \"%s\" failed:", failure.getTestIdentifier().getDisplayName()));
124+
l(String.format("%s", failure.getException()));
136125
}
137126
}
138-
139-
l(String.format("%s", failure.getException()));
140127
}
141128

142129
private String getParameterizedMethodName(TestExecutionSummary.Failure failure) {
@@ -153,7 +140,7 @@ public String buildEndUserResult() {
153140
}
154141

155142
public String buildDebugResult() {
156-
return debug.toString() + "\n\n" + result.toString() + "\n\n\n\n\n" + this.consoleOutput.toString();
143+
return debug.toString() + "\n\n" + result.toString();
157144
}
158145

159146

src/main/java/nl/tudelft/cse1110/grader/util/ClassUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public static String asClassPath(String librariesDir) {
5757
libraries.add(file.getAbsolutePath());
5858
}
5959

60-
return libraries.stream().collect(Collectors.joining(":"));
60+
return libraries.stream().collect(Collectors.joining(";"));
6161
}
6262

6363
/**

src/test/java/nl/tudelft/cse1110/grader/integration/GraderIntegrationTestBase.java

-2
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,8 @@ public String run(List<ExecutionStep> plan, CheckScript codeCheckerScript, Strin
7676

7777
ResultBuilder result = new ResultBuilder();
7878

79-
result.startCapturingConsole();
8079
ExecutionFlow flow = ExecutionFlow.asSteps(plan, cfg, result);
8180
flow.run();
82-
result.stopCapturingConsole();
8381

8482
return result.buildEndUserResult();
8583
}

0 commit comments

Comments
 (0)