Skip to content

Commit d2c7606

Browse files
committed
Test warning logs for CloseableResource without AutoCloseable
Issue #4434
1 parent c82c098 commit d2c7606

File tree

2 files changed

+36
-16
lines changed

2 files changed

+36
-16
lines changed

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/AbstractExtensionContext.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import org.junit.jupiter.engine.extension.ExtensionContextInternal;
3636
import org.junit.jupiter.engine.extension.ExtensionRegistry;
3737
import org.junit.platform.commons.JUnitException;
38+
import org.junit.platform.commons.logging.Logger;
39+
import org.junit.platform.commons.logging.LoggerFactory;
3840
import org.junit.platform.commons.util.Preconditions;
3941
import org.junit.platform.commons.util.UnrecoverableExceptions;
4042
import org.junit.platform.engine.EngineExecutionListener;
@@ -50,6 +52,8 @@
5052
*/
5153
abstract class AbstractExtensionContext<T extends TestDescriptor> implements ExtensionContextInternal, AutoCloseable {
5254

55+
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractExtensionContext.class);
56+
5357
private final ExtensionContext parent;
5458
private final EngineExecutionListener engineExecutionListener;
5559
private final T testDescriptor;
@@ -98,8 +102,8 @@ private NamespacedHierarchicalStore.CloseAction<org.junit.platform.engine.suppor
98102

99103
if (value instanceof Store.CloseableResource) {
100104
if (isAutoCloseEnabled) {
101-
engineExecutionListener.reportingEntryPublished(testDescriptor, ReportEntry.from("WARNING",
102-
"Type implements CloseableResource but not AutoCloseable: " + value.getClass().getName()));
105+
LOGGER.warn(
106+
() -> "Type implements CloseableResource but not AutoCloseable: " + value.getClass().getName());
103107
}
104108
((Store.CloseableResource) value).close();
105109
}

jupiter-tests/src/test/java/org/junit/jupiter/engine/descriptor/ResourceAutoClosingTests.java

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,17 @@
1414
import static org.mockito.Mockito.mock;
1515
import static org.mockito.Mockito.when;
1616

17+
import java.util.logging.Level;
18+
import java.util.logging.LogRecord;
19+
1720
import org.junit.jupiter.api.Test;
18-
import org.junit.jupiter.api.extension.BeforeAllCallback;
19-
import org.junit.jupiter.api.extension.ExtendWith;
2021
import org.junit.jupiter.api.extension.ExtensionContext;
22+
import org.junit.jupiter.api.fixtures.TrackLogRecords;
2123
import org.junit.jupiter.engine.config.JupiterConfiguration;
2224
import org.junit.jupiter.engine.extension.ExtensionRegistry;
25+
import org.junit.platform.commons.logging.LogRecordListener;
2326
import org.junit.platform.launcher.core.NamespacedHierarchicalStoreProviders;
27+
import org.junit.platform.testkit.engine.ExecutionRecorder;
2428

2529
class ResourceAutoClosingTests {
2630

@@ -60,6 +64,24 @@ void shouldNotCloseAutoCloseableWhenAutoCloseEnabledIsFalse() throws Exception {
6064
assertThat(resource.closed).isFalse();
6165
}
6266

67+
@Test
68+
void shouldLogWarningWhenClosingResourceImplementsCloseableResourceButNotAutoCloseable(
69+
@TrackLogRecords LogRecordListener listener) throws Exception {
70+
ExecutionRecorder executionRecorder = new ExecutionRecorder();
71+
CloseableResource resource = new CloseableResource();
72+
String msg = "Type implements CloseableResource but not AutoCloseable: " + resource.getClass().getName();
73+
when(configuration.isAutoCloseEnabled()).thenReturn(true);
74+
75+
ExtensionContext extensionContext = new JupiterEngineExtensionContext(executionRecorder, testDescriptor,
76+
configuration, extensionRegistry, launcherStoreFacade);
77+
ExtensionContext.Store store = extensionContext.getStore(ExtensionContext.Namespace.GLOBAL);
78+
store.put("resource", resource);
79+
80+
((AutoCloseable) extensionContext).close();
81+
assertThat(listener.stream(Level.WARNING)).map(LogRecord::getMessage).anyMatch(msg::equals);
82+
assertThat(resource.closed).isTrue();
83+
}
84+
6385
static class AutoCloseableResource implements AutoCloseable {
6486
private boolean closed = false;
6587

@@ -69,19 +91,13 @@ public void close() {
6991
}
7092
}
7193

72-
static class AutoCloseableResourceStoreUsingExtension implements BeforeAllCallback {
73-
@Override
74-
public void beforeAll(ExtensionContext context) {
75-
var store = context.getStore(ExtensionContext.Namespace.GLOBAL);
76-
store.put("resource", new AutoCloseableResource());
77-
}
78-
}
94+
@SuppressWarnings("deprecation")
95+
static class CloseableResource implements ExtensionContext.Store.CloseableResource {
96+
private boolean closed = false;
7997

80-
@SuppressWarnings("JUnitMalformedDeclaration")
81-
@ExtendWith(AutoCloseableResourceStoreUsingExtension.class)
82-
static class AutoCloseableTestCase {
83-
@Test
84-
void dummyTest() {
98+
@Override
99+
public void close() {
100+
closed = true;
85101
}
86102
}
87103
}

0 commit comments

Comments
 (0)