diff --git a/junit-platform-commons/src/main/java/org/junit/platform/commons/logging/LogRecordListener.java b/junit-platform-commons/src/main/java/org/junit/platform/commons/logging/LogRecordListener.java index 24823b8f9e8..76386bc3a37 100644 --- a/junit-platform-commons/src/main/java/org/junit/platform/commons/logging/LogRecordListener.java +++ b/junit-platform-commons/src/main/java/org/junit/platform/commons/logging/LogRecordListener.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.logging.Level; import java.util.logging.LogRecord; import org.apiguardian.api.API; @@ -78,4 +79,35 @@ public List getLogRecords(Class clazz) { // @formatter:on } + /** + * Get the list of {@link LogRecord log records} that have been + * {@linkplain #logRecordSubmitted submitted} to this listener + * for the given class at the given log level. + * + *

As stated in the JavaDoc for {@code LogRecord}, a submitted + * {@code LogRecord} should not be updated by the client application. Thus, + * the {@code LogRecords} in the returned list should only be inspected for + * testing purposes and not modified in any way. + * + * @param clazz the class for which to get the log records; never {@code null} + * @param level the log level for which to get the log records; never {@code null} + */ + public List getLogRecords(Class clazz, Level level) { + // NOTE: we cannot use org.junit.platform.commons.util.Preconditions here + // since that would introduce a package cycle. + if (clazz == null) { + throw new JUnitException("Class must not be null"); + } + if (level == null) { + throw new JUnitException("Level must not be null"); + } + + // @formatter:off + return this.logRecords.stream() + .filter(logRecord -> logRecord.getLoggerName().equals(clazz.getName())) + .filter(logRecord -> logRecord.getLevel() == level) + .collect(toList()); + // @formatter:on + } + } diff --git a/junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/TestClassRequestResolverTests.java b/junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/TestClassRequestResolverTests.java index 9df12241009..7e8da8285e8 100644 --- a/junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/TestClassRequestResolverTests.java +++ b/junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/TestClassRequestResolverTests.java @@ -67,8 +67,7 @@ void logsWarningOnNonFilterableRunner(LogRecordListener listener) { resolve(new TestClassRequest(testClass, asList(filter))); // @formatter:off - assertThat(listener.getLogRecords(TestClassRequestResolver.class).stream() - .filter(logRecord -> logRecord.getLevel() == Level.WARNING) + assertThat(listener.getLogRecords(TestClassRequestResolver.class, Level.WARNING).stream() .map(LogRecord::getMessage) .filter(m -> m.equals("Runner " + IgnoredClassRunner.class.getName() // + " (used on " + testClass.getName() + ") does not support filtering" // diff --git a/junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/UniqueIdSelectorResolverTests.java b/junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/UniqueIdSelectorResolverTests.java index 74bcacbc8ec..ae6c0dd3747 100644 --- a/junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/UniqueIdSelectorResolverTests.java +++ b/junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/UniqueIdSelectorResolverTests.java @@ -91,8 +91,7 @@ void logsWarningOnUnexpectedTestDescriptor(LogRecordListener listener) { private void assertLoggedWarning(LogRecordListener listener, String expectedMessage) { // @formatter:off - assertThat(listener.getLogRecords(UniqueIdSelectorResolver.class).stream() - .filter(logRecord -> logRecord.getLevel() == Level.WARNING) + assertThat(listener.getLogRecords(UniqueIdSelectorResolver.class, Level.WARNING).stream() .map(LogRecord::getMessage) .filter(m -> m.equals(expectedMessage)) .count() diff --git a/junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/VintageDiscovererTests.java b/junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/VintageDiscovererTests.java index 922b3a70bdf..6e22a76ea0e 100644 --- a/junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/VintageDiscovererTests.java +++ b/junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/VintageDiscovererTests.java @@ -38,7 +38,7 @@ class VintageDiscovererTests { @Test - void logsWarningWhenFilterExcludesClass(LogRecordListener listener) { + void logsDebugMessageWhenFilterExcludesClass(LogRecordListener listener) { ClassNameFilter fooFilter = className -> includedIf(Foo.class.getName().equals(className), () -> "match", () -> "no match"); @@ -55,8 +55,7 @@ void logsWarningWhenFilterExcludesClass(LogRecordListener listener) { assertThat(testDescriptor.getChildren()).hasSize(1); // @formatter:off - assertThat(listener.getLogRecords(VintageDiscoverer.class).stream() - .filter(logRecord -> logRecord.getLevel() == Level.FINE) + assertThat(listener.getLogRecords(VintageDiscoverer.class, Level.FINE).stream() .map(LogRecord::getMessage) .filter(m -> m.equals("Class " + Bar.class.getName() + " was excluded by a class filter: no match")) .count() diff --git a/junit-vintage-engine/src/test/java/org/junit/vintage/engine/support/UniqueIdReaderTests.java b/junit-vintage-engine/src/test/java/org/junit/vintage/engine/support/UniqueIdReaderTests.java index 57a49a1aa9c..0df1703c196 100644 --- a/junit-vintage-engine/src/test/java/org/junit/vintage/engine/support/UniqueIdReaderTests.java +++ b/junit-vintage-engine/src/test/java/org/junit/vintage/engine/support/UniqueIdReaderTests.java @@ -51,8 +51,7 @@ void returnsDisplayNameWhenUniqueIdCannotBeRead(LogRecordListener listener) { assertEquals(description.getDisplayName(), uniqueId); // @formatter:off - assertThat(listener.getLogRecords(UniqueIdReader.class).stream() - .filter(logRecord -> logRecord.getLevel() == Level.WARNING) + assertThat(listener.getLogRecords(UniqueIdReader.class, Level.WARNING).stream() .map(LogRecord::getMessage) .filter(m -> m.equals("Could not read unique ID for Description; using display name instead: " + description.getDisplayName()))