From e0d2849163b1084d9b17842e0524de8f44e83101 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Sat, 31 Aug 2024 18:12:39 -0400 Subject: [PATCH 01/25] Issue: #3139 part 1 Tasks completed: 1. Locate ConsoleLauncher output 2. Check if actual and expected of AssertionFailedError are both type of CharSequence To do list: 1. Add diff function dependency 2. Using diff to generate the output desired Issue: #3139 --- .../console/tasks/ConsoleTestExecutor.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java index 1cdddf814e10..e38a27865856 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java @@ -36,6 +36,9 @@ import org.junit.platform.launcher.listeners.SummaryGeneratingListener; import org.junit.platform.launcher.listeners.TestExecutionSummary; import org.junit.platform.reporting.legacy.xml.LegacyXmlReportGeneratingListener; +//for console output of diff +import org.opentest4j.AssertionFailedError; +import org.opentest4j.ValueWrapper; /** * @since 1.0 @@ -180,11 +183,34 @@ private Optional createXmlWritingListener(PrintWriter out private void printSummary(TestExecutionSummary summary, PrintWriter out) { // Otherwise the failures have already been printed in detail if (EnumSet.of(Details.NONE, Details.SUMMARY, Details.TREE).contains(outputOptions.getDetails())) { + //adding diff code here + summary.getFailures().forEach(failure -> { + //get AssertionFailedError + if(failure.getException() instanceof AssertionFailedError){ + AssertionFailedError assertionFailedError = (AssertionFailedError)failure.getException(); + ValueWrapper expected = assertionFailedError.getExpected(); + ValueWrapper actual = assertionFailedError.getActual(); + //apply diff function + if (isCharSequence(expected) && isCharSequence(actual)) { + out.printf("Expected %s\n", expected.getStringRepresentation()); + out.printf("Actual %s\n", actual.getStringRepresentation()); + //out.printf("Diff %s", calculateDiff(expected, actual)); + } + + } + }); + + summary.getFailures(); summary.printFailuresTo(out); } summary.printTo(out); } + private boolean isCharSequence(ValueWrapper value) { + return value != null && CharSequence.class.isAssignableFrom(value.getType()); + } + + @FunctionalInterface public interface Factory { ConsoleTestExecutor create(TestDiscoveryOptions discoveryOptions, TestConsoleOutputOptions outputOptions); From bc1b464446a692d0eae69ef01fd4f3ffd2c572b8 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Sat, 31 Aug 2024 19:32:33 -0400 Subject: [PATCH 02/25] Issue: #3139 part 2 Tasks completed: 1. Locate ConsoleLauncher output 2. Check if actual and expected of AssertionFailedError are both type of CharSequence 3. Add diff function dependency 4. Using diff to generate the output desired Issue: #3139 --- .../release-notes-5.12.0-M1.adoc | 1 + gradle/libs.versions.toml | 1 + .../junit-platform-console.gradle.kts | 6 ++++- .../console/tasks/ConsoleTestExecutor.java | 24 +++++++++++++------ 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/documentation/src/docs/asciidoc/release-notes/release-notes-5.12.0-M1.adoc b/documentation/src/docs/asciidoc/release-notes/release-notes-5.12.0-M1.adoc index 89a1753a5280..b54c48686446 100644 --- a/documentation/src/docs/asciidoc/release-notes/release-notes-5.12.0-M1.adoc +++ b/documentation/src/docs/asciidoc/release-notes/release-notes-5.12.0-M1.adoc @@ -4,6 +4,7 @@ *Date of Release:* ❓ *Scope:* ❓ +* `ConsoleLauncher` output shows extra diff message for failed assertions on two `CharSequence` objects For a complete list of all _closed_ issues and pull requests for this release, consult the link:{junit5-repo}+/milestone/75?closed=1+[5.12.0-M1] milestone page in the diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6ec9b4616f49..23955a16a02c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -41,6 +41,7 @@ jfrunit = { module = "org.moditect.jfrunit:jfrunit-core", version = "1.0.0.Alpha jimfs = { module = "com.google.jimfs:jimfs", version = "1.3.0" } jmh-core = { module = "org.openjdk.jmh:jmh-core", version.ref = "jmh" } jmh-generator-annprocess = { module = "org.openjdk.jmh:jmh-generator-annprocess", version.ref = "jmh" } +java-diff-utils = { module = "io.github.java-diff-utils:java-diff-utils", version = "4.12" } joox = { module = "org.jooq:joox", version = "2.0.1" } jte = { module = "gg.jte:jte", version = "3.1.12" } junit4 = { module = "junit:junit", version = { require = "[4.12,)", prefer = "4.13.2" } } diff --git a/junit-platform-console/junit-platform-console.gradle.kts b/junit-platform-console/junit-platform-console.gradle.kts index be24d568d804..591450399a18 100644 --- a/junit-platform-console/junit-platform-console.gradle.kts +++ b/junit-platform-console/junit-platform-console.gradle.kts @@ -16,6 +16,8 @@ dependencies { compileOnly(libs.openTestReporting.events) + implementation(libs.java.diff.utils) + shadowed(libs.picocli) osgiVerification(projects.junitJupiterEngine) @@ -28,7 +30,9 @@ tasks { "--add-modules", "org.opentest4j.reporting.events", "--add-reads", "${project.projects.junitPlatformReporting.dependencyProject.javaModuleName}=org.opentest4j.reporting.events", "--add-modules", "info.picocli", - "--add-reads", "${javaModuleName}=info.picocli" + "--add-reads", "${javaModuleName}=info.picocli", + "--add-modules", "io.github.javadiffutils", + "--add-reads", "${javaModuleName}=io.github.javadiffutils" )) } shadowJar { diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java index e38a27865856..471df66e53ae 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java @@ -16,11 +16,15 @@ import java.net.URL; import java.net.URLClassLoader; import java.nio.file.Path; +import java.util.Arrays; import java.util.EnumSet; import java.util.List; import java.util.Optional; import java.util.function.Supplier; +import com.github.difflib.text.DiffRow; +import com.github.difflib.text.DiffRowGenerator; + import org.apiguardian.api.API; import org.junit.platform.commons.JUnitException; import org.junit.platform.commons.util.ClassLoaderUtils; @@ -36,7 +40,6 @@ import org.junit.platform.launcher.listeners.SummaryGeneratingListener; import org.junit.platform.launcher.listeners.TestExecutionSummary; import org.junit.platform.reporting.legacy.xml.LegacyXmlReportGeneratingListener; -//for console output of diff import org.opentest4j.AssertionFailedError; import org.opentest4j.ValueWrapper; @@ -186,15 +189,23 @@ private void printSummary(TestExecutionSummary summary, PrintWriter out) { //adding diff code here summary.getFailures().forEach(failure -> { //get AssertionFailedError - if(failure.getException() instanceof AssertionFailedError){ - AssertionFailedError assertionFailedError = (AssertionFailedError)failure.getException(); + if (failure.getException() instanceof AssertionFailedError) { + AssertionFailedError assertionFailedError = (AssertionFailedError) failure.getException(); ValueWrapper expected = assertionFailedError.getExpected(); ValueWrapper actual = assertionFailedError.getActual(); //apply diff function if (isCharSequence(expected) && isCharSequence(actual)) { - out.printf("Expected %s\n", expected.getStringRepresentation()); - out.printf("Actual %s\n", actual.getStringRepresentation()); - //out.printf("Diff %s", calculateDiff(expected, actual)); + DiffRowGenerator generator = DiffRowGenerator.create().showInlineDiffs(true).inlineDiffByWord( + true).oldTag(f -> "~").newTag(f -> "**").build(); + List rows = generator.generateDiffRows( + Arrays.asList(expected.getStringRepresentation()), + Arrays.asList(actual.getStringRepresentation())); + + System.out.println( + "\nPlease put the diff result below into a onli../ne markdown editor to see markdown effect: "); + for (DiffRow row : rows) { + System.out.println(" | " + row.getOldLine() + " | " + row.getNewLine() + " | "); + } } } @@ -210,7 +221,6 @@ private boolean isCharSequence(ValueWrapper value) { return value != null && CharSequence.class.isAssignableFrom(value.getType()); } - @FunctionalInterface public interface Factory { ConsoleTestExecutor create(TestDiscoveryOptions discoveryOptions, TestConsoleOutputOptions outputOptions); From 2fa9a8e03eb00fd0da6086c9a5c65c485c253981 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Sat, 31 Aug 2024 19:34:44 -0400 Subject: [PATCH 03/25] Issue: #3139 part 2 update delete one line of extra code --- .../org/junit/platform/console/tasks/ConsoleTestExecutor.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java index 471df66e53ae..352b1716716b 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java @@ -210,8 +210,6 @@ private void printSummary(TestExecutionSummary summary, PrintWriter out) { } }); - - summary.getFailures(); summary.printFailuresTo(out); } summary.printTo(out); From 50552b42395196310fc081e0192610fd3cbdd0b1 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Sat, 31 Aug 2024 20:39:52 -0400 Subject: [PATCH 04/25] Issue: junit-team#3139 part 2 update Fixed different profile issue. Tasks completed: 1. Locate ConsoleLauncher output 2. Check if actual and expected of AssertionFailedError are both type of CharSequence 3. Add diff function dependency 4. Using diff to generate the output desired ToDo: 1.Automatic test case for diff output Issue: junit-team#3139 --- .../junit/platform/console/tasks/ConsoleTestExecutor.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java index 352b1716716b..3639ec7f3afc 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java @@ -201,10 +201,10 @@ private void printSummary(TestExecutionSummary summary, PrintWriter out) { Arrays.asList(expected.getStringRepresentation()), Arrays.asList(actual.getStringRepresentation())); - System.out.println( - "\nPlease put the diff result below into a onli../ne markdown editor to see markdown effect: "); + out.printf( + "\nPlease put the diff result below into a online markdown editor to see markdown effect: \n"); for (DiffRow row : rows) { - System.out.println(" | " + row.getOldLine() + " | " + row.getNewLine() + " | "); + out.printf(" | %s | %s | \n",row.getOldLine(),row.getNewLine()); } } From 7b4088da5d9f28faeaa6e2095296d6c0681bb37e Mon Sep 17 00:00:00 2001 From: XuJiang Date: Sat, 14 Sep 2024 12:45:35 -0400 Subject: [PATCH 05/25] Fix format issue --- .../org/junit/platform/console/tasks/ConsoleTestExecutor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java index 3639ec7f3afc..37ab8864a5ab 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java @@ -204,7 +204,7 @@ private void printSummary(TestExecutionSummary summary, PrintWriter out) { out.printf( "\nPlease put the diff result below into a online markdown editor to see markdown effect: \n"); for (DiffRow row : rows) { - out.printf(" | %s | %s | \n",row.getOldLine(),row.getNewLine()); + out.printf(" | %s | %s | \n", row.getOldLine(), row.getNewLine()); } } From bb29695881b6acaf7ca23ee0d6b0cf4a64555b2b Mon Sep 17 00:00:00 2001 From: XuJiang Date: Sat, 14 Sep 2024 13:14:27 -0400 Subject: [PATCH 06/25] fix build documentation issue --- .../src/module/org.junit.platform.console/module-info.java | 1 + 1 file changed, 1 insertion(+) diff --git a/junit-platform-console/src/module/org.junit.platform.console/module-info.java b/junit-platform-console/src/module/org.junit.platform.console/module-info.java index 08d28b434f50..8b1961c9881b 100644 --- a/junit-platform-console/src/module/org.junit.platform.console/module-info.java +++ b/junit-platform-console/src/module/org.junit.platform.console/module-info.java @@ -20,6 +20,7 @@ requires org.junit.platform.engine; requires org.junit.platform.launcher; requires org.junit.platform.reporting; + requires io.github.javadiffutils; provides java.util.spi.ToolProvider with org.junit.platform.console.ConsoleLauncherToolProvider; } From 2c27b53734f40e35a06e50d4483e7dfddd7a81ab Mon Sep 17 00:00:00 2001 From: XuJiang Date: Sat, 14 Sep 2024 13:36:34 -0400 Subject: [PATCH 07/25] trying to fix the build error --- .../src/module/org.junit.platform.console/module-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/junit-platform-console/src/module/org.junit.platform.console/module-info.java b/junit-platform-console/src/module/org.junit.platform.console/module-info.java index 8b1961c9881b..050d3ffbdee1 100644 --- a/junit-platform-console/src/module/org.junit.platform.console/module-info.java +++ b/junit-platform-console/src/module/org.junit.platform.console/module-info.java @@ -20,7 +20,7 @@ requires org.junit.platform.engine; requires org.junit.platform.launcher; requires org.junit.platform.reporting; - requires io.github.javadiffutils; + requires com.github.javadiffutils; provides java.util.spi.ToolProvider with org.junit.platform.console.ConsoleLauncherToolProvider; } From af16685987a96f8c2fee6acef02eba2517deb107 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Sat, 14 Sep 2024 14:11:16 -0400 Subject: [PATCH 08/25] Try to Fix Dependency issue Issue: junit-team#3139 --- gradle/libs.versions.toml | 3 ++- .../src/module/org.junit.platform.console/module-info.java | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9740ccbc4580..5593b451cda2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,6 +18,7 @@ opentest4j = "1.3.0" openTestReporting = "0.1.0-M2" surefire = "3.5.0" xmlunit = "2.10.0" +javadiffutils = "4.12" [libraries] ant = { module = "org.apache.ant:ant", version.ref = "ant" } @@ -44,7 +45,7 @@ jfrunit = { module = "org.moditect.jfrunit:jfrunit-core", version = "1.0.0.Alpha jimfs = { module = "com.google.jimfs:jimfs", version = "1.3.0" } jmh-core = { module = "org.openjdk.jmh:jmh-core", version.ref = "jmh" } jmh-generator-annprocess = { module = "org.openjdk.jmh:jmh-generator-annprocess", version.ref = "jmh" } -java-diff-utils = { module = "io.github.java-diff-utils:java-diff-utils", version = "4.12" } +java-diff-utils = { module = "io.github.java-diff-utils:java-diff-utils", version.ref = "javadiffutils" } joox = { module = "org.jooq:joox", version = "2.0.1" } jte = { module = "gg.jte:jte", version = "3.1.12" } junit4 = { module = "junit:junit", version = { require = "[4.12,)", prefer = "4.13.2" } } diff --git a/junit-platform-console/src/module/org.junit.platform.console/module-info.java b/junit-platform-console/src/module/org.junit.platform.console/module-info.java index 050d3ffbdee1..08d28b434f50 100644 --- a/junit-platform-console/src/module/org.junit.platform.console/module-info.java +++ b/junit-platform-console/src/module/org.junit.platform.console/module-info.java @@ -20,7 +20,6 @@ requires org.junit.platform.engine; requires org.junit.platform.launcher; requires org.junit.platform.reporting; - requires com.github.javadiffutils; provides java.util.spi.ToolProvider with org.junit.platform.console.ConsoleLauncherToolProvider; } From 3d73d1e4b77f59026d6f6cfc3a09ac887353e573 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Sat, 14 Sep 2024 15:37:26 -0400 Subject: [PATCH 09/25] Issue: junit-team#3139 Add external diff module to module documentation Add external diff module to module documentation For unknown reason, the test cases can not find the external module while the gradle can build normally. Issue: junit-team#3139 --- .../src/module/org.junit.platform.console/module-info.java | 1 + 1 file changed, 1 insertion(+) diff --git a/junit-platform-console/src/module/org.junit.platform.console/module-info.java b/junit-platform-console/src/module/org.junit.platform.console/module-info.java index 08d28b434f50..8b1961c9881b 100644 --- a/junit-platform-console/src/module/org.junit.platform.console/module-info.java +++ b/junit-platform-console/src/module/org.junit.platform.console/module-info.java @@ -20,6 +20,7 @@ requires org.junit.platform.engine; requires org.junit.platform.launcher; requires org.junit.platform.reporting; + requires io.github.javadiffutils; provides java.util.spi.ToolProvider with org.junit.platform.console.ConsoleLauncherToolProvider; } From 53d884cb89679d6d2696951f18902d913f3d392b Mon Sep 17 00:00:00 2001 From: XuJiang Date: Mon, 23 Sep 2024 07:45:11 -0400 Subject: [PATCH 10/25] Remove module-info.java documentation for testing --- .../src/module/org.junit.platform.console/module-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/junit-platform-console/src/module/org.junit.platform.console/module-info.java b/junit-platform-console/src/module/org.junit.platform.console/module-info.java index 8b1961c9881b..bbb3b7c1e3d6 100644 --- a/junit-platform-console/src/module/org.junit.platform.console/module-info.java +++ b/junit-platform-console/src/module/org.junit.platform.console/module-info.java @@ -20,7 +20,7 @@ requires org.junit.platform.engine; requires org.junit.platform.launcher; requires org.junit.platform.reporting; - requires io.github.javadiffutils; + provides java.util.spi.ToolProvider with org.junit.platform.console.ConsoleLauncherToolProvider; } From 26bcaa45905da4161a43a701c70e4bfbf0cb3726 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Mon, 23 Sep 2024 07:54:33 -0400 Subject: [PATCH 11/25] Run spotless and do final testing before draft PR --- .../src/module/org.junit.platform.console/module-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/junit-platform-console/src/module/org.junit.platform.console/module-info.java b/junit-platform-console/src/module/org.junit.platform.console/module-info.java index bbb3b7c1e3d6..5fa912d2eed4 100644 --- a/junit-platform-console/src/module/org.junit.platform.console/module-info.java +++ b/junit-platform-console/src/module/org.junit.platform.console/module-info.java @@ -20,7 +20,7 @@ requires org.junit.platform.engine; requires org.junit.platform.launcher; requires org.junit.platform.reporting; - + provides java.util.spi.ToolProvider with org.junit.platform.console.ConsoleLauncherToolProvider; } From 32487523f9bf006afd537b6e422f1340b8d2573d Mon Sep 17 00:00:00 2001 From: XuJiang Date: Wed, 25 Sep 2024 07:58:08 -0400 Subject: [PATCH 12/25] Update libs.versions.toml --- gradle/libs.versions.toml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0a5465793fbe..c54d3cd10406 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -18,7 +18,6 @@ opentest4j = "1.3.0" openTestReporting = "0.1.0-M2" surefire = "3.5.0" xmlunit = "2.10.0" -javadiffutils = "4.12" [libraries] ant = { module = "org.apache.ant:ant", version.ref = "ant" } @@ -45,7 +44,7 @@ jfrunit = { module = "org.moditect.jfrunit:jfrunit-core", version = "1.0.0.Alpha jimfs = { module = "com.google.jimfs:jimfs", version = "1.3.0" } jmh-core = { module = "org.openjdk.jmh:jmh-core", version.ref = "jmh" } jmh-generator-annprocess = { module = "org.openjdk.jmh:jmh-generator-annprocess", version.ref = "jmh" } -java-diff-utils = { module = "io.github.java-diff-utils:java-diff-utils", version.ref = "javadiffutils" } +java-diff-utils = { module = "io.github.java-diff-utils:java-diff-utils", version = "4.12" } joox = { module = "org.jooq:joox", version = "2.0.1" } jte = { module = "gg.jte:jte", version = "3.1.12" } junit4 = { module = "junit:junit", version = { require = "[4.12,)", prefer = "4.13.2" } } From 04f789a0b493c2021aa8aef0f6d50bba7305c249 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Mon, 7 Oct 2024 13:29:48 -0400 Subject: [PATCH 13/25] Adding diffPrinter class 1. Add diffPrinter class 2. replace diff in consoleTestExecutor with diffPrinter - will be deleted evetually 3. mark the location of adding diff in flatPrinter and verboseTreePrinter. Issue: junit-team#3139 --- .../console/tasks/ConsoleTestExecutor.java | 19 ++--------- .../platform/console/tasks/DiffPrinter.java | 34 +++++++++++++++++++ .../console/tasks/FlatPrintingListener.java | 1 + .../tasks/VerboseTreePrintingListener.java | 1 + 4 files changed, 38 insertions(+), 17 deletions(-) create mode 100644 junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java index 37ab8864a5ab..2456ba3f38fa 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java @@ -16,15 +16,11 @@ import java.net.URL; import java.net.URLClassLoader; import java.nio.file.Path; -import java.util.Arrays; import java.util.EnumSet; import java.util.List; import java.util.Optional; import java.util.function.Supplier; -import com.github.difflib.text.DiffRow; -import com.github.difflib.text.DiffRowGenerator; - import org.apiguardian.api.API; import org.junit.platform.commons.JUnitException; import org.junit.platform.commons.util.ClassLoaderUtils; @@ -103,10 +99,8 @@ private static void printFoundTestsSummary(PrintWriter out, TestPlan testPlan) { private TestExecutionSummary executeTests(PrintWriter out, Optional reportsDir) { Launcher launcher = launcherSupplier.get(); SummaryGeneratingListener summaryListener = registerListeners(out, reportsDir, launcher); - LauncherDiscoveryRequest discoveryRequest = new DiscoveryRequestCreator().toDiscoveryRequest(discoveryOptions); launcher.execute(discoveryRequest); - TestExecutionSummary summary = summaryListener.getSummary(); if (summary.getTotalFailureCount() > 0 || outputOptions.getDetails() != Details.NONE) { printSummary(summary, out); @@ -195,17 +189,8 @@ private void printSummary(TestExecutionSummary summary, PrintWriter out) { ValueWrapper actual = assertionFailedError.getActual(); //apply diff function if (isCharSequence(expected) && isCharSequence(actual)) { - DiffRowGenerator generator = DiffRowGenerator.create().showInlineDiffs(true).inlineDiffByWord( - true).oldTag(f -> "~").newTag(f -> "**").build(); - List rows = generator.generateDiffRows( - Arrays.asList(expected.getStringRepresentation()), - Arrays.asList(actual.getStringRepresentation())); - - out.printf( - "\nPlease put the diff result below into a online markdown editor to see markdown effect: \n"); - for (DiffRow row : rows) { - out.printf(" | %s | %s | \n", row.getOldLine(), row.getNewLine()); - } + DiffPrinter.printDiff(out, expected.getStringRepresentation(), + actual.getStringRepresentation()); } } diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java new file mode 100644 index 000000000000..91994c6220f0 --- /dev/null +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java @@ -0,0 +1,34 @@ +/* + * Copyright 2015-2024 the original author or authors. + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v2.0 which + * accompanies this distribution and is available at + * + * https://www.eclipse.org/legal/epl-v20.html + */ + +package org.junit.platform.console.tasks; + +import java.io.PrintWriter; +import java.util.Arrays; +import java.util.List; + +import com.github.difflib.text.DiffRow; +import com.github.difflib.text.DiffRowGenerator; + +/** + * class provide access to printDiff function + */ +class DiffPrinter { + //print the difference of two print to out + static void printDiff(PrintWriter out, String expected, String actual) { + DiffRowGenerator generator = DiffRowGenerator.create().showInlineDiffs(true).inlineDiffByWord(true).oldTag( + f -> "~").newTag(f -> "**").build(); + List rows = generator.generateDiffRows(Arrays.asList(expected), Arrays.asList(actual)); + out.printf("\nPlease put the diff result below into a online markdown editor to see markdown effect: \n"); + for (DiffRow row : rows) { + out.printf(" | %s | %s | \n", row.getOldLine(), row.getNewLine()); + } + } +} diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/FlatPrintingListener.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/FlatPrintingListener.java index 0cbe2abd3352..f56de0718045 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/FlatPrintingListener.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/FlatPrintingListener.java @@ -79,6 +79,7 @@ private void printlnTestDescriptor(Style style, String message, TestIdentifier t private void printlnException(Style style, Throwable throwable) { printlnMessage(style, "Exception", ExceptionUtils.readStackTrace(throwable)); + //add diff here } private void printlnMessage(Style style, String message, String detail) { diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/VerboseTreePrintingListener.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/VerboseTreePrintingListener.java index a8df758dc114..000b329ffe33 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/VerboseTreePrintingListener.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/VerboseTreePrintingListener.java @@ -97,6 +97,7 @@ public void executionStarted(TestIdentifier testIdentifier) { @Override public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) { testExecutionResult.getThrowable().ifPresent(t -> printDetail(Style.FAILED, "caught", readStackTrace(t))); + //add diff here if (testIdentifier.isContainer()) { Long creationMillis = frames.pop(); printVerticals(theme.end()); From 983e09041a84b5642278cd6151aad437680d283d Mon Sep 17 00:00:00 2001 From: XJ114514 <127024445+XJ114514@users.noreply.github.com> Date: Tue, 8 Oct 2024 22:12:34 -0400 Subject: [PATCH 14/25] Update junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java Co-authored-by: Marc Philipp --- .../java/org/junit/platform/console/tasks/DiffPrinter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java index 91994c6220f0..863b1354cba7 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java @@ -26,7 +26,8 @@ static void printDiff(PrintWriter out, String expected, String actual) { DiffRowGenerator generator = DiffRowGenerator.create().showInlineDiffs(true).inlineDiffByWord(true).oldTag( f -> "~").newTag(f -> "**").build(); List rows = generator.generateDiffRows(Arrays.asList(expected), Arrays.asList(actual)); - out.printf("\nPlease put the diff result below into a online markdown editor to see markdown effect: \n"); + out.println(); + out.println("Please put the diff result below into a online markdown editor to see markdown effect:"); for (DiffRow row : rows) { out.printf(" | %s | %s | \n", row.getOldLine(), row.getNewLine()); } From eef49f1d4afbd82264642d776444c5d9f088278f Mon Sep 17 00:00:00 2001 From: XJ114514 <127024445+XJ114514@users.noreply.github.com> Date: Tue, 8 Oct 2024 22:12:39 -0400 Subject: [PATCH 15/25] Update junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java Co-authored-by: Marc Philipp --- .../main/java/org/junit/platform/console/tasks/DiffPrinter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java index 863b1354cba7..ffb5c0daafc4 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java @@ -24,7 +24,7 @@ class DiffPrinter { //print the difference of two print to out static void printDiff(PrintWriter out, String expected, String actual) { DiffRowGenerator generator = DiffRowGenerator.create().showInlineDiffs(true).inlineDiffByWord(true).oldTag( - f -> "~").newTag(f -> "**").build(); + f -> "~~").newTag(f -> "**").build(); List rows = generator.generateDiffRows(Arrays.asList(expected), Arrays.asList(actual)); out.println(); out.println("Please put the diff result below into a online markdown editor to see markdown effect:"); From bcd060874b64cca372b9d82678e7f3294dc1df18 Mon Sep 17 00:00:00 2001 From: XJ114514 <127024445+XJ114514@users.noreply.github.com> Date: Tue, 8 Oct 2024 22:12:58 -0400 Subject: [PATCH 16/25] Update junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java Co-authored-by: Marc Philipp --- .../main/java/org/junit/platform/console/tasks/DiffPrinter.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java index ffb5c0daafc4..8667f16678ea 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java @@ -28,6 +28,8 @@ static void printDiff(PrintWriter out, String expected, String actual) { List rows = generator.generateDiffRows(Arrays.asList(expected), Arrays.asList(actual)); out.println(); out.println("Please put the diff result below into a online markdown editor to see markdown effect:"); + out.println("| expected | actual |"); + out.println("| -------- | ------ |"); for (DiffRow row : rows) { out.printf(" | %s | %s | \n", row.getOldLine(), row.getNewLine()); } From cc69bfbc6f6a4c6b58f17dfb58f940cd5db709d8 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Tue, 8 Oct 2024 22:34:20 -0400 Subject: [PATCH 17/25] adjust the diffPrinter output format --- .../java/org/junit/platform/console/tasks/DiffPrinter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java index 8667f16678ea..05639c27f949 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java @@ -31,7 +31,8 @@ static void printDiff(PrintWriter out, String expected, String actual) { out.println("| expected | actual |"); out.println("| -------- | ------ |"); for (DiffRow row : rows) { - out.printf(" | %s | %s | \n", row.getOldLine(), row.getNewLine()); + out.printf("| %s | %s |", row.getOldLine(), row.getNewLine()); + out.println(); } } } From 705b4cf96b8597ecbef3a69752a09c9535973cf4 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Wed, 9 Oct 2024 12:09:11 -0400 Subject: [PATCH 18/25] Update the rule of inlineDiffByWord Only if one word has space, show inlineDiffByWord. --- .../java/org/junit/platform/console/tasks/DiffPrinter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java index 05639c27f949..5ec2a200672e 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java @@ -23,7 +23,11 @@ class DiffPrinter { //print the difference of two print to out static void printDiff(PrintWriter out, String expected, String actual) { - DiffRowGenerator generator = DiffRowGenerator.create().showInlineDiffs(true).inlineDiffByWord(true).oldTag( + boolean inlineDiffByWordFlag = false; + if(expected.contains(" ") || actual.contains(" ")){ + inlineDiffByWordFlag = true; + } + DiffRowGenerator generator = DiffRowGenerator.create().showInlineDiffs(true).inlineDiffByWord(inlineDiffByWordFlag).oldTag( f -> "~~").newTag(f -> "**").build(); List rows = generator.generateDiffRows(Arrays.asList(expected), Arrays.asList(actual)); out.println(); From 2383f3e5c3068725ab0a8364daf6a6494776c6c8 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Sat, 12 Oct 2024 13:49:46 -0400 Subject: [PATCH 19/25] update the format of printing diff --- .../platform/console/tasks/ConsoleTestExecutor.java | 4 +++- .../junit/platform/console/tasks/DiffPrinter.java | 13 ++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java index 2456ba3f38fa..03b5e0b09347 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java @@ -180,6 +180,7 @@ private Optional createXmlWritingListener(PrintWriter out private void printSummary(TestExecutionSummary summary, PrintWriter out) { // Otherwise the failures have already been printed in detail if (EnumSet.of(Details.NONE, Details.SUMMARY, Details.TREE).contains(outputOptions.getDetails())) { + summary.printFailuresTo(out); //adding diff code here summary.getFailures().forEach(failure -> { //get AssertionFailedError @@ -189,13 +190,14 @@ private void printSummary(TestExecutionSummary summary, PrintWriter out) { ValueWrapper actual = assertionFailedError.getActual(); //apply diff function if (isCharSequence(expected) && isCharSequence(actual)) { + out.printf("%nDiffs (Markdown):%n"); + out.printf(" %s:", failure.getTestIdentifier().getDisplayName()); DiffPrinter.printDiff(out, expected.getStringRepresentation(), actual.getStringRepresentation()); } } }); - summary.printFailuresTo(out); } summary.printTo(out); } diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java index 5ec2a200672e..d23aa6fc85d8 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java @@ -24,18 +24,17 @@ class DiffPrinter { //print the difference of two print to out static void printDiff(PrintWriter out, String expected, String actual) { boolean inlineDiffByWordFlag = false; - if(expected.contains(" ") || actual.contains(" ")){ + if (expected.contains(" ") || actual.contains(" ")) { inlineDiffByWordFlag = true; } - DiffRowGenerator generator = DiffRowGenerator.create().showInlineDiffs(true).inlineDiffByWord(inlineDiffByWordFlag).oldTag( - f -> "~~").newTag(f -> "**").build(); + DiffRowGenerator generator = DiffRowGenerator.create().showInlineDiffs(true).inlineDiffByWord( + inlineDiffByWordFlag).oldTag(f -> "~~").newTag(f -> "**").build(); List rows = generator.generateDiffRows(Arrays.asList(expected), Arrays.asList(actual)); out.println(); - out.println("Please put the diff result below into a online markdown editor to see markdown effect:"); - out.println("| expected | actual |"); - out.println("| -------- | ------ |"); + out.println(" | expected | actual |"); + out.println(" | -------- | ------ |"); for (DiffRow row : rows) { - out.printf("| %s | %s |", row.getOldLine(), row.getNewLine()); + out.printf(" | %s | %s |", row.getOldLine(), row.getNewLine()); out.println(); } } From 82f723a4e1f9a60ac14ef22dabad50a6f2d01f02 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Sat, 19 Oct 2024 13:05:10 -0400 Subject: [PATCH 20/25] Issue: junit-team#3139 Update to display each test method info 1. Add a `testPlan` getter to `platform/launcher/listeners/SummaryGeneratingListener.java`. 2. DiffPrinter now needs testPlan to display the testMethod info. Issue: junit-team#3139 --- .../console/tasks/ConsoleTestExecutor.java | 12 +++++---- .../platform/console/tasks/DiffPrinter.java | 26 ++++++++++++++++++- .../listeners/SummaryGeneratingListener.java | 7 +++++ 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java index 03b5e0b09347..131bc6dd56b4 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java @@ -49,6 +49,8 @@ public class ConsoleTestExecutor { private final TestConsoleOutputOptions outputOptions; private final Supplier launcherSupplier; + private TestPlan testPlanListeners; + public ConsoleTestExecutor(TestDiscoveryOptions discoveryOptions, TestConsoleOutputOptions outputOptions) { this(discoveryOptions, outputOptions, LauncherFactory::create); } @@ -79,7 +81,6 @@ private void discoverTests(PrintWriter out) { LauncherDiscoveryRequest discoveryRequest = new DiscoveryRequestCreator().toDiscoveryRequest(discoveryOptions); TestPlan testPlan = launcher.discover(discoveryRequest); - commandLineTestPrinter.ifPresent(printer -> printer.listTests(testPlan)); if (outputOptions.getDetails() != Details.NONE) { printFoundTestsSummary(out, testPlan); @@ -103,6 +104,8 @@ private TestExecutionSummary executeTests(PrintWriter out, Optional report launcher.execute(discoveryRequest); TestExecutionSummary summary = summaryListener.getSummary(); if (summary.getTotalFailureCount() > 0 || outputOptions.getDetails() != Details.NONE) { + //get testPlan from summaryListener + testPlanListeners = summaryListener.getTestPlan(); printSummary(summary, out); } @@ -182,6 +185,7 @@ private void printSummary(TestExecutionSummary summary, PrintWriter out) { if (EnumSet.of(Details.NONE, Details.SUMMARY, Details.TREE).contains(outputOptions.getDetails())) { summary.printFailuresTo(out); //adding diff code here + out.printf("%nDiffs (Markdown):%n"); summary.getFailures().forEach(failure -> { //get AssertionFailedError if (failure.getException() instanceof AssertionFailedError) { @@ -190,10 +194,8 @@ private void printSummary(TestExecutionSummary summary, PrintWriter out) { ValueWrapper actual = assertionFailedError.getActual(); //apply diff function if (isCharSequence(expected) && isCharSequence(actual)) { - out.printf("%nDiffs (Markdown):%n"); - out.printf(" %s:", failure.getTestIdentifier().getDisplayName()); - DiffPrinter.printDiff(out, expected.getStringRepresentation(), - actual.getStringRepresentation()); + new DiffPrinter(testPlanListeners).printDiff(out, expected.getStringRepresentation(), + actual.getStringRepresentation(), failure.getTestIdentifier()); } } diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java index d23aa6fc85d8..a4ae7e087c5d 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java @@ -10,19 +10,32 @@ package org.junit.platform.console.tasks; +import static java.lang.String.join; + import java.io.PrintWriter; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.github.difflib.text.DiffRow; import com.github.difflib.text.DiffRowGenerator; +import org.junit.platform.launcher.TestIdentifier; +import org.junit.platform.launcher.TestPlan; + /** * class provide access to printDiff function */ class DiffPrinter { + private final TestPlan testPlan; + + public DiffPrinter(TestPlan testPlan) { + this.testPlan = testPlan; + } + //print the difference of two print to out - static void printDiff(PrintWriter out, String expected, String actual) { + void printDiff(PrintWriter out, String expected, String actual, TestIdentifier testIdentifier) { + out.printf(" %s:", describeTest(testIdentifier)); boolean inlineDiffByWordFlag = false; if (expected.contains(" ") || actual.contains(" ")) { inlineDiffByWordFlag = true; @@ -38,4 +51,15 @@ static void printDiff(PrintWriter out, String expected, String actual) { out.println(); } } + + private String describeTest(TestIdentifier testIdentifier) { + List descriptionParts = new ArrayList<>(); + collectTestDescription(testIdentifier, descriptionParts); + return join(":", descriptionParts); + } + + private void collectTestDescription(TestIdentifier identifier, List descriptionParts) { + descriptionParts.add(0, identifier.getDisplayName()); + testPlan.getParent(identifier).ifPresent(parent -> collectTestDescription(parent, descriptionParts)); + } } diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java index c01c09af2bf9..f881769fc07b 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java @@ -46,6 +46,13 @@ public TestExecutionSummary getSummary() { return this.summary; } + /** + * Get the testPlan of this listener. + */ + public TestPlan getTestPlan() { + return testPlan; + } + @Override public void testPlanExecutionStarted(TestPlan testPlan) { this.testPlan = testPlan; From 536e9c717ca644c2e5cd186edc761a23c4faf403 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Mon, 21 Oct 2024 08:07:34 -0400 Subject: [PATCH 21/25] Print `Diffs (Markdown)` only once when needed --- .../junit/platform/console/tasks/ConsoleTestExecutor.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java index 131bc6dd56b4..0a35a32a916d 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java @@ -184,9 +184,13 @@ private void printSummary(TestExecutionSummary summary, PrintWriter out) { // Otherwise the failures have already been printed in detail if (EnumSet.of(Details.NONE, Details.SUMMARY, Details.TREE).contains(outputOptions.getDetails())) { summary.printFailuresTo(out); + boolean[] diffFlag = {true}; //adding diff code here - out.printf("%nDiffs (Markdown):%n"); summary.getFailures().forEach(failure -> { + if(diffFlag[0]){ + out.printf("%nDiffs (Markdown):%n"); + diffFlag[0] = false; + } //get AssertionFailedError if (failure.getException() instanceof AssertionFailedError) { AssertionFailedError assertionFailedError = (AssertionFailedError) failure.getException(); @@ -197,7 +201,6 @@ private void printSummary(TestExecutionSummary summary, PrintWriter out) { new DiffPrinter(testPlanListeners).printDiff(out, expected.getStringRepresentation(), actual.getStringRepresentation(), failure.getTestIdentifier()); } - } }); } From f44f929bcfcf52ca58ed239e405599c4fcfde41e Mon Sep 17 00:00:00 2001 From: XuJiang Date: Mon, 21 Oct 2024 08:18:53 -0400 Subject: [PATCH 22/25] apply spotless --- .../org/junit/platform/console/tasks/ConsoleTestExecutor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java index 0a35a32a916d..57d92922341d 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java @@ -184,10 +184,10 @@ private void printSummary(TestExecutionSummary summary, PrintWriter out) { // Otherwise the failures have already been printed in detail if (EnumSet.of(Details.NONE, Details.SUMMARY, Details.TREE).contains(outputOptions.getDetails())) { summary.printFailuresTo(out); - boolean[] diffFlag = {true}; + boolean[] diffFlag = { true }; //adding diff code here summary.getFailures().forEach(failure -> { - if(diffFlag[0]){ + if (diffFlag[0]) { out.printf("%nDiffs (Markdown):%n"); diffFlag[0] = false; } From eef975b848c877baa33dca244d4fdc765f99b3b9 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Fri, 25 Oct 2024 07:51:16 -0400 Subject: [PATCH 23/25] Combine PR made by Marc from XJ114514#1 add testPlanCapturer listener --- .../console/tasks/ConsoleTestExecutor.java | 21 ++++++++++++------- .../listeners/SummaryGeneratingListener.java | 7 ------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java index 57d92922341d..ce8e6e2f3a47 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java @@ -49,8 +49,6 @@ public class ConsoleTestExecutor { private final TestConsoleOutputOptions outputOptions; private final Supplier launcherSupplier; - private TestPlan testPlanListeners; - public ConsoleTestExecutor(TestDiscoveryOptions discoveryOptions, TestConsoleOutputOptions outputOptions) { this(discoveryOptions, outputOptions, LauncherFactory::create); } @@ -101,12 +99,11 @@ private TestExecutionSummary executeTests(PrintWriter out, Optional report Launcher launcher = launcherSupplier.get(); SummaryGeneratingListener summaryListener = registerListeners(out, reportsDir, launcher); LauncherDiscoveryRequest discoveryRequest = new DiscoveryRequestCreator().toDiscoveryRequest(discoveryOptions); + TestPlanCapturer testPlanCapturer = new TestPlanCapturer(); launcher.execute(discoveryRequest); TestExecutionSummary summary = summaryListener.getSummary(); if (summary.getTotalFailureCount() > 0 || outputOptions.getDetails() != Details.NONE) { - //get testPlan from summaryListener - testPlanListeners = summaryListener.getTestPlan(); - printSummary(summary, out); + printSummary(summary, testPlanCapturer.testPlan, out); } return summary; @@ -180,7 +177,7 @@ private Optional createXmlWritingListener(PrintWriter out return reportsDir.map(it -> new LegacyXmlReportGeneratingListener(it, out)); } - private void printSummary(TestExecutionSummary summary, PrintWriter out) { + private void printSummary(TestExecutionSummary summary, TestPlan testPlan, PrintWriter out) { // Otherwise the failures have already been printed in detail if (EnumSet.of(Details.NONE, Details.SUMMARY, Details.TREE).contains(outputOptions.getDetails())) { summary.printFailuresTo(out); @@ -198,7 +195,7 @@ private void printSummary(TestExecutionSummary summary, PrintWriter out) { ValueWrapper actual = assertionFailedError.getActual(); //apply diff function if (isCharSequence(expected) && isCharSequence(actual)) { - new DiffPrinter(testPlanListeners).printDiff(out, expected.getStringRepresentation(), + new DiffPrinter(testPlan).printDiff(out, expected.getStringRepresentation(), actual.getStringRepresentation(), failure.getTestIdentifier()); } } @@ -215,4 +212,14 @@ private boolean isCharSequence(ValueWrapper value) { public interface Factory { ConsoleTestExecutor create(TestDiscoveryOptions discoveryOptions, TestConsoleOutputOptions outputOptions); } + + private static class TestPlanCapturer implements TestExecutionListener { + + private TestPlan testPlan; + + @Override + public void testPlanExecutionStarted(TestPlan testPlan) { + this.testPlan = testPlan; + } + } } diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java index f881769fc07b..c01c09af2bf9 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java @@ -46,13 +46,6 @@ public TestExecutionSummary getSummary() { return this.summary; } - /** - * Get the testPlan of this listener. - */ - public TestPlan getTestPlan() { - return testPlan; - } - @Override public void testPlanExecutionStarted(TestPlan testPlan) { this.testPlan = testPlan; From de00adec21618ed993f2b5dc014dc75ad612d2d6 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Fri, 25 Oct 2024 08:16:38 -0400 Subject: [PATCH 24/25] Revert "Combine PR made by Marc from XJ114514#1" This reverts commit eef975b848c877baa33dca244d4fdc765f99b3b9. --- .../console/tasks/ConsoleTestExecutor.java | 21 +++++++------------ .../listeners/SummaryGeneratingListener.java | 7 +++++++ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java index ce8e6e2f3a47..57d92922341d 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java @@ -49,6 +49,8 @@ public class ConsoleTestExecutor { private final TestConsoleOutputOptions outputOptions; private final Supplier launcherSupplier; + private TestPlan testPlanListeners; + public ConsoleTestExecutor(TestDiscoveryOptions discoveryOptions, TestConsoleOutputOptions outputOptions) { this(discoveryOptions, outputOptions, LauncherFactory::create); } @@ -99,11 +101,12 @@ private TestExecutionSummary executeTests(PrintWriter out, Optional report Launcher launcher = launcherSupplier.get(); SummaryGeneratingListener summaryListener = registerListeners(out, reportsDir, launcher); LauncherDiscoveryRequest discoveryRequest = new DiscoveryRequestCreator().toDiscoveryRequest(discoveryOptions); - TestPlanCapturer testPlanCapturer = new TestPlanCapturer(); launcher.execute(discoveryRequest); TestExecutionSummary summary = summaryListener.getSummary(); if (summary.getTotalFailureCount() > 0 || outputOptions.getDetails() != Details.NONE) { - printSummary(summary, testPlanCapturer.testPlan, out); + //get testPlan from summaryListener + testPlanListeners = summaryListener.getTestPlan(); + printSummary(summary, out); } return summary; @@ -177,7 +180,7 @@ private Optional createXmlWritingListener(PrintWriter out return reportsDir.map(it -> new LegacyXmlReportGeneratingListener(it, out)); } - private void printSummary(TestExecutionSummary summary, TestPlan testPlan, PrintWriter out) { + private void printSummary(TestExecutionSummary summary, PrintWriter out) { // Otherwise the failures have already been printed in detail if (EnumSet.of(Details.NONE, Details.SUMMARY, Details.TREE).contains(outputOptions.getDetails())) { summary.printFailuresTo(out); @@ -195,7 +198,7 @@ private void printSummary(TestExecutionSummary summary, TestPlan testPlan, Print ValueWrapper actual = assertionFailedError.getActual(); //apply diff function if (isCharSequence(expected) && isCharSequence(actual)) { - new DiffPrinter(testPlan).printDiff(out, expected.getStringRepresentation(), + new DiffPrinter(testPlanListeners).printDiff(out, expected.getStringRepresentation(), actual.getStringRepresentation(), failure.getTestIdentifier()); } } @@ -212,14 +215,4 @@ private boolean isCharSequence(ValueWrapper value) { public interface Factory { ConsoleTestExecutor create(TestDiscoveryOptions discoveryOptions, TestConsoleOutputOptions outputOptions); } - - private static class TestPlanCapturer implements TestExecutionListener { - - private TestPlan testPlan; - - @Override - public void testPlanExecutionStarted(TestPlan testPlan) { - this.testPlan = testPlan; - } - } } diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java index c01c09af2bf9..f881769fc07b 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/SummaryGeneratingListener.java @@ -46,6 +46,13 @@ public TestExecutionSummary getSummary() { return this.summary; } + /** + * Get the testPlan of this listener. + */ + public TestPlan getTestPlan() { + return testPlan; + } + @Override public void testPlanExecutionStarted(TestPlan testPlan) { this.testPlan = testPlan; From a3f8f25a4ff79faf0b0ebd5114332a9562f599d8 Mon Sep 17 00:00:00 2001 From: XuJiang Date: Fri, 25 Oct 2024 08:36:08 -0400 Subject: [PATCH 25/25] Issue: junit-team#3139 Add number reference to each test --- .../org/junit/platform/console/tasks/DiffPrinter.java | 3 ++- .../launcher/listeners/MutableTestExecutionSummary.java | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java index a4ae7e087c5d..9537bda92e4a 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/tasks/DiffPrinter.java @@ -35,7 +35,8 @@ public DiffPrinter(TestPlan testPlan) { //print the difference of two print to out void printDiff(PrintWriter out, String expected, String actual, TestIdentifier testIdentifier) { - out.printf(" %s:", describeTest(testIdentifier)); + char id = testIdentifier.getUniqueId().charAt(testIdentifier.getUniqueId().length() - 4); + out.printf(" (%c) %s:", id == 's' ? '1' : id, describeTest(testIdentifier)); boolean inlineDiffByWordFlag = false; if (expected.contains(" ") || actual.contains(" ")) { inlineDiffByWordFlag = true; diff --git a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/MutableTestExecutionSummary.java b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/MutableTestExecutionSummary.java index da39a9a2b6d4..549b7ca95544 100644 --- a/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/MutableTestExecutionSummary.java +++ b/junit-platform-launcher/src/main/java/org/junit/platform/launcher/listeners/MutableTestExecutionSummary.java @@ -203,7 +203,8 @@ public void printFailuresTo(PrintWriter writer, int maxStackTraceLines) { if (getTotalFailureCount() > 0) { writer.printf("%nFailures (%d):%n", getTotalFailureCount()); this.failures.forEach(failure -> { - writer.printf("%s%s%n", TAB, describeTest(failure.getTestIdentifier())); + writer.printf("%s(%c) %s%n", TAB, getTestId(failure.getTestIdentifier()), + describeTest(failure.getTestIdentifier())); printSource(writer, failure.getTestIdentifier()); writer.printf("%s=> %s%n", DOUBLE_TAB, failure.getException()); printStackTrace(writer, failure.getException(), maxStackTraceLines); @@ -223,6 +224,12 @@ private String describeTest(TestIdentifier testIdentifier) { return join(":", descriptionParts); } + //return the unique id of the test + private char getTestId(TestIdentifier testIdentifier) { + char id = testIdentifier.getUniqueId().charAt(testIdentifier.getUniqueId().length() - 4); + return id == 's' ? '1' : id; + } + private void collectTestDescription(TestIdentifier identifier, List descriptionParts) { descriptionParts.add(0, identifier.getDisplayName()); this.testPlan.getParent(identifier).ifPresent(parent -> collectTestDescription(parent, descriptionParts));