14
14
import static org .mockito .Mockito .mock ;
15
15
import static org .mockito .Mockito .when ;
16
16
17
+ import java .util .logging .Level ;
18
+ import java .util .logging .LogRecord ;
19
+
17
20
import org .junit .jupiter .api .Test ;
18
- import org .junit .jupiter .api .extension .BeforeAllCallback ;
19
- import org .junit .jupiter .api .extension .ExtendWith ;
20
21
import org .junit .jupiter .api .extension .ExtensionContext ;
22
+ import org .junit .jupiter .api .fixtures .TrackLogRecords ;
21
23
import org .junit .jupiter .engine .config .JupiterConfiguration ;
22
24
import org .junit .jupiter .engine .extension .ExtensionRegistry ;
25
+ import org .junit .platform .commons .logging .LogRecordListener ;
23
26
import org .junit .platform .launcher .core .NamespacedHierarchicalStoreProviders ;
27
+ import org .junit .platform .testkit .engine .ExecutionRecorder ;
24
28
25
29
class ResourceAutoClosingTests {
26
30
@@ -30,6 +34,7 @@ class ResourceAutoClosingTests {
30
34
private final LauncherStoreFacade launcherStoreFacade = new LauncherStoreFacade (
31
35
NamespacedHierarchicalStoreProviders .dummyNamespacedHierarchicalStore ());
32
36
37
+ // TODO when config name is renamed, update the test name
33
38
@ Test
34
39
void shouldCloseAutoCloseableWhenAutoCloseEnabledIsTrue () throws Exception {
35
40
AutoCloseableResource resource = new AutoCloseableResource ();
@@ -60,6 +65,42 @@ void shouldNotCloseAutoCloseableWhenAutoCloseEnabledIsFalse() throws Exception {
60
65
assertThat (resource .closed ).isFalse ();
61
66
}
62
67
68
+ @ Test
69
+ void shouldLogWarningWhenClosingResourceImplementsCloseableResourceButNotAutoCloseableAndConfigIsTrue (
70
+ @ TrackLogRecords LogRecordListener listener ) throws Exception {
71
+ ExecutionRecorder executionRecorder = new ExecutionRecorder ();
72
+ CloseableResource resource = new CloseableResource ();
73
+ String msg = "Type implements CloseableResource but not AutoCloseable: " + resource .getClass ().getName ();
74
+ when (configuration .isAutoCloseEnabled ()).thenReturn (true );
75
+
76
+ ExtensionContext extensionContext = new JupiterEngineExtensionContext (executionRecorder , testDescriptor ,
77
+ configuration , extensionRegistry , launcherStoreFacade );
78
+ ExtensionContext .Store store = extensionContext .getStore (ExtensionContext .Namespace .GLOBAL );
79
+ store .put ("resource" , resource );
80
+
81
+ ((AutoCloseable ) extensionContext ).close ();
82
+ assertThat (listener .stream (Level .WARNING )).map (LogRecord ::getMessage ).anyMatch (msg ::equals );
83
+ assertThat (resource .closed ).isTrue ();
84
+ }
85
+
86
+ @ Test
87
+ void shouldNotLogWarningWhenClosingResourceImplementsCloseableResourceAndAutoCloseableAndConfigIsFalse (
88
+ @ TrackLogRecords LogRecordListener listener ) throws Exception {
89
+ ExecutionRecorder executionRecorder = new ExecutionRecorder ();
90
+ CloseableResource resource = new CloseableResource ();
91
+ String msg = "Type implements CloseableResource but not AutoCloseable: " + resource .getClass ().getName ();
92
+ when (configuration .isAutoCloseEnabled ()).thenReturn (false );
93
+
94
+ ExtensionContext extensionContext = new JupiterEngineExtensionContext (executionRecorder , testDescriptor ,
95
+ configuration , extensionRegistry , launcherStoreFacade );
96
+ ExtensionContext .Store store = extensionContext .getStore (ExtensionContext .Namespace .GLOBAL );
97
+ store .put ("resource" , resource );
98
+
99
+ ((AutoCloseable ) extensionContext ).close ();
100
+ assertThat (listener .stream (Level .WARNING )).map (LogRecord ::getMessage ).noneMatch (msg ::equals );
101
+ assertThat (resource .closed ).isTrue ();
102
+ }
103
+
63
104
static class AutoCloseableResource implements AutoCloseable {
64
105
private boolean closed = false ;
65
106
@@ -69,19 +110,13 @@ public void close() {
69
110
}
70
111
}
71
112
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
- }
113
+ @ SuppressWarnings ("deprecation" )
114
+ static class CloseableResource implements ExtensionContext .Store .CloseableResource {
115
+ private boolean closed = false ;
79
116
80
- @ SuppressWarnings ("JUnitMalformedDeclaration" )
81
- @ ExtendWith (AutoCloseableResourceStoreUsingExtension .class )
82
- static class AutoCloseableTestCase {
83
- @ Test
84
- void dummyTest () {
117
+ @ Override
118
+ public void close () {
119
+ closed = true ;
85
120
}
86
121
}
87
122
}
0 commit comments