Skip to content

Commit d9ec28d

Browse files
committed
Introduce log level filtering support in LogRecordListener
Issue: #1047
1 parent 5c18778 commit d9ec28d

File tree

5 files changed

+37
-9
lines changed

5 files changed

+37
-9
lines changed

Diff for: junit-platform-commons/src/main/java/org/junit/platform/commons/logging/LogRecordListener.java

+32
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import java.util.ArrayList;
1717
import java.util.List;
18+
import java.util.logging.Level;
1819
import java.util.logging.LogRecord;
1920

2021
import org.apiguardian.api.API;
@@ -78,4 +79,35 @@ public List<LogRecord> getLogRecords(Class<?> clazz) {
7879
// @formatter:on
7980
}
8081

82+
/**
83+
* Get the list of {@link LogRecord log records} that have been
84+
* {@linkplain #logRecordSubmitted submitted} to this listener
85+
* for the given class at the given log level.
86+
*
87+
* <p>As stated in the JavaDoc for {@code LogRecord}, a submitted
88+
* {@code LogRecord} should not be updated by the client application. Thus,
89+
* the {@code LogRecords} in the returned list should only be inspected for
90+
* testing purposes and not modified in any way.
91+
*
92+
* @param clazz the class for which to get the log records; never {@code null}
93+
* @param level the log level for which to get the log records; never {@code null}
94+
*/
95+
public List<LogRecord> getLogRecords(Class<?> clazz, Level level) {
96+
// NOTE: we cannot use org.junit.platform.commons.util.Preconditions here
97+
// since that would introduce a package cycle.
98+
if (clazz == null) {
99+
throw new JUnitException("Class must not be null");
100+
}
101+
if (level == null) {
102+
throw new JUnitException("Level must not be null");
103+
}
104+
105+
// @formatter:off
106+
return this.logRecords.stream()
107+
.filter(logRecord -> logRecord.getLoggerName().equals(clazz.getName()))
108+
.filter(logRecord -> logRecord.getLevel() == level)
109+
.collect(toList());
110+
// @formatter:on
111+
}
112+
81113
}

Diff for: junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/TestClassRequestResolverTests.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ void logsWarningOnNonFilterableRunner(LogRecordListener listener) {
6767
resolve(new TestClassRequest(testClass, asList(filter)));
6868

6969
// @formatter:off
70-
assertThat(listener.getLogRecords(TestClassRequestResolver.class).stream()
71-
.filter(logRecord -> logRecord.getLevel() == Level.WARNING)
70+
assertThat(listener.getLogRecords(TestClassRequestResolver.class, Level.WARNING).stream()
7271
.map(LogRecord::getMessage)
7372
.filter(m -> m.equals("Runner " + IgnoredClassRunner.class.getName() //
7473
+ " (used on " + testClass.getName() + ") does not support filtering" //

Diff for: junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/UniqueIdSelectorResolverTests.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,7 @@ void logsWarningOnUnexpectedTestDescriptor(LogRecordListener listener) {
9191

9292
private void assertLoggedWarning(LogRecordListener listener, String expectedMessage) {
9393
// @formatter:off
94-
assertThat(listener.getLogRecords(UniqueIdSelectorResolver.class).stream()
95-
.filter(logRecord -> logRecord.getLevel() == Level.WARNING)
94+
assertThat(listener.getLogRecords(UniqueIdSelectorResolver.class, Level.WARNING).stream()
9695
.map(LogRecord::getMessage)
9796
.filter(m -> m.equals(expectedMessage))
9897
.count()

Diff for: junit-vintage-engine/src/test/java/org/junit/vintage/engine/discovery/VintageDiscovererTests.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
class VintageDiscovererTests {
3939

4040
@Test
41-
void logsWarningWhenFilterExcludesClass(LogRecordListener listener) {
41+
void logsDebugMessageWhenFilterExcludesClass(LogRecordListener listener) {
4242
ClassNameFilter fooFilter = className -> includedIf(Foo.class.getName().equals(className), () -> "match",
4343
() -> "no match");
4444

@@ -55,8 +55,7 @@ void logsWarningWhenFilterExcludesClass(LogRecordListener listener) {
5555
assertThat(testDescriptor.getChildren()).hasSize(1);
5656

5757
// @formatter:off
58-
assertThat(listener.getLogRecords(VintageDiscoverer.class).stream()
59-
.filter(logRecord -> logRecord.getLevel() == Level.FINE)
58+
assertThat(listener.getLogRecords(VintageDiscoverer.class, Level.FINE).stream()
6059
.map(LogRecord::getMessage)
6160
.filter(m -> m.equals("Class " + Bar.class.getName() + " was excluded by a class filter: no match"))
6261
.count()

Diff for: junit-vintage-engine/src/test/java/org/junit/vintage/engine/support/UniqueIdReaderTests.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ void returnsDisplayNameWhenUniqueIdCannotBeRead(LogRecordListener listener) {
5151
assertEquals(description.getDisplayName(), uniqueId);
5252

5353
// @formatter:off
54-
assertThat(listener.getLogRecords(UniqueIdReader.class).stream()
55-
.filter(logRecord -> logRecord.getLevel() == Level.WARNING)
54+
assertThat(listener.getLogRecords(UniqueIdReader.class, Level.WARNING).stream()
5655
.map(LogRecord::getMessage)
5756
.filter(m -> m.equals("Could not read unique ID for Description; using display name instead: "
5857
+ description.getDisplayName()))

0 commit comments

Comments
 (0)