Skip to content

Commit 7a0fae4

Browse files
committed
Add tests for FileEntry handling in TestExecutionListeners
1 parent b8ab9f6 commit 7a0fae4

File tree

6 files changed

+72
-6
lines changed

6 files changed

+72
-6
lines changed

gradle/plugins/common/src/main/kotlin/junitbuild/exec/RunConsoleLauncher.kt

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@ import org.gradle.api.file.ConfigurableFileCollection
66
import org.gradle.api.plugins.JavaPluginExtension
77
import org.gradle.api.provider.ListProperty
88
import org.gradle.api.provider.Property
9-
import org.gradle.api.tasks.*
9+
import org.gradle.api.tasks.CacheableTask
10+
import org.gradle.api.tasks.Classpath
11+
import org.gradle.api.tasks.Input
12+
import org.gradle.api.tasks.Internal
13+
import org.gradle.api.tasks.Nested
14+
import org.gradle.api.tasks.SourceSetContainer
15+
import org.gradle.api.tasks.TaskAction
1016
import org.gradle.api.tasks.options.Option
1117
import org.gradle.jvm.toolchain.JavaLauncher
1218
import org.gradle.jvm.toolchain.JavaToolchainService
@@ -16,7 +22,6 @@ import org.gradle.process.CommandLineArgumentProvider
1622
import org.gradle.process.ExecOperations
1723
import trackOperationSystemAsInput
1824
import java.io.ByteArrayOutputStream
19-
import java.util.*
2025
import javax.inject.Inject
2126

2227
@CacheableTask
@@ -97,4 +102,13 @@ abstract class RunConsoleLauncher @Inject constructor(private val execOperations
97102
debugging.set(enabled)
98103
}
99104

105+
@Suppress("unused")
106+
@Option(
107+
option = "show-output",
108+
description = "Show output"
109+
)
110+
fun setShowOutput(showOutput: Boolean) {
111+
hideOutput.set(!showOutput)
112+
}
113+
100114
}

junit-platform-engine/src/main/java/org/junit/platform/engine/reporting/FileEntry.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public Path getFile() {
6060
@Override
6161
public String toString() {
6262
ToStringBuilder builder = new ToStringBuilder(this);
63+
builder.append("timestamp", this.timestamp);
6364
builder.append("file", this.file);
6465
return builder.toString();
6566
}

platform-tests/src/test/java/org/junit/platform/console/tasks/FlatPrintingListenerTests.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818

1919
import java.io.PrintWriter;
2020
import java.io.StringWriter;
21+
import java.nio.file.Path;
2122

2223
import org.assertj.core.util.Maps;
2324
import org.junit.jupiter.api.Nested;
2425
import org.junit.jupiter.api.Test;
2526
import org.junit.platform.engine.UniqueId;
27+
import org.junit.platform.engine.reporting.FileEntry;
2628
import org.junit.platform.engine.reporting.ReportEntry;
2729
import org.junit.platform.fakes.TestDescriptorStub;
2830
import org.junit.platform.launcher.TestIdentifier;
@@ -60,6 +62,19 @@ void reportingEntryPublished() {
6062
() -> assertTrue(lines[1].endsWith(", foo = 'bar']")));
6163
}
6264

65+
@Test
66+
void fileEntryPublished() {
67+
var stringWriter = new StringWriter();
68+
listener(stringWriter).fileEntryPublished(newTestIdentifier(), FileEntry.from(Path.of("test.txt")));
69+
var lines = lines(stringWriter);
70+
71+
assertEquals(2, lines.length);
72+
assertAll("lines in the output", //
73+
() -> assertEquals("Reported: demo-test ([engine:demo-engine])", lines[0]), //
74+
() -> assertTrue(lines[1].startsWith(INDENTATION + "=> Reported file: FileEntry [timestamp =")), //
75+
() -> assertTrue(lines[1].endsWith(", file = test.txt]")));
76+
}
77+
6378
@Test
6479
void executionFinishedWithFailure() {
6580
var stringWriter = new StringWriter();

platform-tests/src/test/java/org/junit/platform/console/tasks/TreePrinterTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@
2121
import java.io.PrintWriter;
2222
import java.nio.charset.Charset;
2323
import java.nio.charset.StandardCharsets;
24+
import java.nio.file.Path;
2425
import java.util.List;
2526

2627
import org.junit.jupiter.api.Test;
2728
import org.junit.platform.console.options.Theme;
2829
import org.junit.platform.engine.TestExecutionResult;
2930
import org.junit.platform.engine.UniqueId;
31+
import org.junit.platform.engine.reporting.FileEntry;
3032
import org.junit.platform.engine.reporting.ReportEntry;
3133
import org.junit.platform.fakes.TestDescriptorStub;
3234
import org.junit.platform.launcher.TestIdentifier;
@@ -92,7 +94,7 @@ void reportsAreTabbedCorrectly() {
9294
c1.addChild(m1);
9395

9496
var m2 = new TreeNode(identifier("m-2", "method two")).setResult(successful());
95-
m2.addReportEntry(ReportEntry.from("key", "m-2"));
97+
m2.addFileEntry(FileEntry.from(Path.of("test.txt")));
9698
c1.addChild(m2);
9799

98100
new TreePrinter(out, Theme.UNICODE, ColorPalette.NONE).print(root);
@@ -105,7 +107,7 @@ void reportsAreTabbedCorrectly() {
105107
" ├─ method one ✔", //
106108
" │ ....-..-..T..:...* key = `m-1`", //
107109
" └─ method two ✔", //
108-
" ....-..-..T..:...* key = `m-2`" //
110+
" ....-..-..T..:...* file:.*" //
109111
), //
110112
actual());
111113
}

platform-tests/src/test/java/org/junit/platform/console/tasks/VerboseTreeListenerTests.java renamed to platform-tests/src/test/java/org/junit/platform/console/tasks/VerboseTreePrintingListenerTests.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,21 @@
1515

1616
import java.io.PrintWriter;
1717
import java.io.StringWriter;
18+
import java.nio.file.Path;
1819
import java.util.List;
1920

2021
import org.junit.jupiter.api.Test;
2122
import org.junit.platform.console.options.Theme;
2223
import org.junit.platform.engine.UniqueId;
24+
import org.junit.platform.engine.reporting.FileEntry;
2325
import org.junit.platform.engine.reporting.ReportEntry;
2426
import org.junit.platform.fakes.TestDescriptorStub;
2527
import org.junit.platform.launcher.TestIdentifier;
2628

2729
/**
2830
* @since 1.3.2
2931
*/
30-
class VerboseTreeListenerTests {
32+
class VerboseTreePrintingListenerTests {
3133

3234
private static final String EOL = System.lineSeparator();
3335

@@ -56,6 +58,15 @@ void reportingEntryPublished() {
5658
assertLinesMatch(List.of(" reports: ReportEntry \\[timestamp = .+, foo = 'bar'\\]"), List.of(lines));
5759
}
5860

61+
@Test
62+
void fileEntryPublished() {
63+
var stringWriter = new StringWriter();
64+
listener(stringWriter).fileEntryPublished(newTestIdentifier(), FileEntry.from(Path.of("test.txt")));
65+
var lines = lines(stringWriter);
66+
67+
assertLinesMatch(List.of(" reports: FileEntry \\[timestamp = .+, file = test.txt\\]"), List.of(lines));
68+
}
69+
5970
@Test
6071
void executionFinishedWithFailure() {
6172
var stringWriter = new StringWriter();

platform-tests/src/test/java/org/junit/platform/jfr/FlightRecordingExecutionListenerIntegrationTests.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,20 @@
1212

1313
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
1414
import static org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder.request;
15+
import static org.junit.platform.launcher.core.OutputDirectoryProviders.hierarchicalOutputDirectoryProvider;
1516
import static org.moditect.jfrunit.ExpectedEvent.event;
1617
import static org.moditect.jfrunit.JfrEventsAssert.assertThat;
1718

19+
import java.io.IOException;
20+
import java.io.UncheckedIOException;
21+
import java.nio.file.Files;
22+
import java.nio.file.Path;
23+
1824
import org.junit.jupiter.api.Disabled;
1925
import org.junit.jupiter.api.Test;
2026
import org.junit.jupiter.api.TestReporter;
2127
import org.junit.jupiter.api.extension.DisabledOnOpenJ9;
28+
import org.junit.jupiter.api.io.TempDir;
2229
import org.junit.jupiter.engine.JupiterTestEngine;
2330
import org.junit.platform.launcher.core.LauncherFactoryForTestingPurposesOnly;
2431
import org.moditect.jfrunit.EnableEvent;
@@ -33,15 +40,18 @@ public class FlightRecordingExecutionListenerIntegrationTests {
3340

3441
@Test
3542
@EnableEvent("org.junit.*")
36-
void reportsEvents() {
43+
void reportsEvents(@TempDir Path tempDir) {
3744
var launcher = LauncherFactoryForTestingPurposesOnly.createLauncher(new JupiterTestEngine());
3845
var request = request() //
3946
.selectors(selectClass(TestCase.class)) //
47+
.outputDirectoryProvider(hierarchicalOutputDirectoryProvider(tempDir)) //
4048
.build();
4149

4250
launcher.execute(request, new FlightRecordingExecutionListener());
4351
jfrEvents.awaitEvents();
4452

53+
var testFile = findPath(tempDir, "glob:**/test.txt");
54+
4555
assertThat(jfrEvents) //
4656
.contains(event("org.junit.TestPlanExecution") //
4757
.with("engineNames", "JUnit Jupiter")) //
@@ -59,17 +69,30 @@ void reportsEvents() {
5969
.contains(event("org.junit.ReportEntry") //
6070
.with("key", "message") //
6171
.with("value", "Hello JFR!")) //
72+
.contains(event("org.junit.FileEntry") //
73+
.with("path", testFile.toAbsolutePath().toString())) //
6274
.contains(event("org.junit.SkippedTest") //
6375
.with("displayName", "skipped()") //
6476
.with("type", "TEST") //
6577
.with("reason", "for demonstration purposes"));
6678
}
6779

80+
private static Path findPath(Path rootDir, @SuppressWarnings("SameParameterValue") String syntaxAndPattern) {
81+
var matcher = rootDir.getFileSystem().getPathMatcher(syntaxAndPattern);
82+
try (var files = Files.walk(rootDir)) {
83+
return files.filter(matcher::matches).findFirst().orElseThrow();
84+
}
85+
catch (IOException e) {
86+
throw new UncheckedIOException(e);
87+
}
88+
}
89+
6890
@SuppressWarnings("JUnitMalformedDeclaration")
6991
static class TestCase {
7092
@Test
7193
void test(TestReporter reporter) {
7294
reporter.publishEntry("message", "Hello JFR!");
95+
reporter.publishFile("test.txt", file -> Files.writeString(file, "test"));
7396
}
7497

7598
@Test

0 commit comments

Comments
 (0)