39
39
import org .junit .jupiter .api .BeforeEach ;
40
40
import org .junit .jupiter .api .DisplayNameGenerator ;
41
41
import org .junit .jupiter .api .Named ;
42
+ import org .junit .jupiter .api .Nested ;
42
43
import org .junit .jupiter .api .Tag ;
43
44
import org .junit .jupiter .api .Test ;
44
45
import org .junit .jupiter .api .extension .Extension ;
@@ -111,33 +112,63 @@ void fromJupiterEngineDescriptor() {
111
112
}
112
113
113
114
@ Test
114
- @ SuppressWarnings ("resource" )
115
115
void fromClassTestDescriptor () {
116
116
var nestedClassDescriptor = nestedClassDescriptor ();
117
117
var outerClassDescriptor = outerClassDescriptor (nestedClassDescriptor );
118
+ var doublyNestedClassDescriptor = doublyNestedClassDescriptor ();
119
+ var methodTestDescriptor = nestedMethodDescriptor ();
120
+ nestedClassDescriptor .addChild (doublyNestedClassDescriptor );
121
+ nestedClassDescriptor .addChild (methodTestDescriptor );
118
122
119
123
var outerExtensionContext = new ClassExtensionContext (null , null , outerClassDescriptor , configuration ,
120
124
extensionRegistry , null );
121
125
122
126
// @formatter:off
123
127
assertAll ("outerContext" ,
124
- () -> assertThat (outerExtensionContext .getElement ()).contains (OuterClass .class ),
125
- () -> assertThat (outerExtensionContext .getTestClass ()).contains (OuterClass .class ),
128
+ () -> assertThat (outerExtensionContext .getElement ()).contains (OuterClassTestCase .class ),
129
+ () -> assertThat (outerExtensionContext .getTestClass ()).contains (OuterClassTestCase .class ),
126
130
() -> assertThat (outerExtensionContext .getTestInstance ()).isEmpty (),
127
131
() -> assertThat (outerExtensionContext .getTestMethod ()).isEmpty (),
128
- () -> assertThat (outerExtensionContext .getRequiredTestClass ()).isEqualTo (OuterClass .class ),
132
+ () -> assertThat (outerExtensionContext .getRequiredTestClass ()).isEqualTo (OuterClassTestCase .class ),
129
133
() -> assertThrows (PreconditionViolationException .class , outerExtensionContext ::getRequiredTestInstance ),
130
134
() -> assertThrows (PreconditionViolationException .class , outerExtensionContext ::getRequiredTestMethod ),
131
135
() -> assertThat (outerExtensionContext .getDisplayName ()).isEqualTo (outerClassDescriptor .getDisplayName ()),
132
136
() -> assertThat (outerExtensionContext .getParent ()).isEmpty (),
133
137
() -> assertThat (outerExtensionContext .getExecutionMode ()).isEqualTo (ExecutionMode .SAME_THREAD ),
134
- () -> assertThat (outerExtensionContext .getExtensions (PreInterruptCallback .class )).isEmpty ()
138
+ () -> assertThat (outerExtensionContext .getExtensions (PreInterruptCallback .class )).isEmpty (),
139
+ () -> assertThat (outerExtensionContext .getEnclosingTestClasses ()).isEmpty ()
135
140
);
136
141
// @formatter:on
137
142
138
143
var nestedExtensionContext = new ClassExtensionContext (outerExtensionContext , null , nestedClassDescriptor ,
139
144
configuration , extensionRegistry , null );
140
- assertThat (nestedExtensionContext .getParent ()).containsSame (outerExtensionContext );
145
+ // @formatter:off
146
+ assertAll ("nestedContext" ,
147
+ () -> assertThat (nestedExtensionContext .getParent ()).containsSame (outerExtensionContext ),
148
+ () -> assertThat (nestedExtensionContext .getTestClass ()).contains (OuterClassTestCase .NestedClass .class ),
149
+ () -> assertThat (nestedExtensionContext .getEnclosingTestClasses ()).containsExactly (OuterClassTestCase .class )
150
+ );
151
+ // @formatter:on
152
+
153
+ var doublyNestedExtensionContext = new ClassExtensionContext (nestedExtensionContext , null ,
154
+ doublyNestedClassDescriptor , configuration , extensionRegistry , null );
155
+ // @formatter:off
156
+ assertAll ("doublyNestedContext" ,
157
+ () -> assertThat (doublyNestedExtensionContext .getParent ()).containsSame (nestedExtensionContext ),
158
+ () -> assertThat (doublyNestedExtensionContext .getTestClass ()).contains (OuterClassTestCase .NestedClass .DoublyNestedClass .class ),
159
+ () -> assertThat (doublyNestedExtensionContext .getEnclosingTestClasses ()).containsExactly (OuterClassTestCase .class , OuterClassTestCase .NestedClass .class )
160
+ );
161
+ // @formatter:on
162
+
163
+ var methodExtensionContext = new MethodExtensionContext (nestedExtensionContext , null , methodTestDescriptor ,
164
+ configuration , extensionRegistry , new OpenTest4JAwareThrowableCollector ());
165
+ // @formatter:off
166
+ assertAll ("methodContext" ,
167
+ () -> assertThat (methodExtensionContext .getParent ()).containsSame (nestedExtensionContext ),
168
+ () -> assertThat (methodExtensionContext .getTestClass ()).contains (OuterClassTestCase .NestedClass .class ),
169
+ () -> assertThat (methodExtensionContext .getEnclosingTestClasses ()).containsExactly (OuterClassTestCase .class )
170
+ );
171
+ // @formatter:on
141
172
}
142
173
143
174
@ Test
@@ -154,7 +185,6 @@ void ExtensionContext_With_ExtensionRegistry_getExtensions() {
154
185
}
155
186
156
187
@ Test
157
- @ SuppressWarnings ("resource" )
158
188
void tagsCanBeRetrievedInExtensionContext () {
159
189
var nestedClassDescriptor = nestedClassDescriptor ();
160
190
var outerClassDescriptor = outerClassDescriptor (nestedClassDescriptor );
@@ -174,20 +204,19 @@ void tagsCanBeRetrievedInExtensionContext() {
174
204
175
205
var methodExtensionContext = new MethodExtensionContext (outerExtensionContext , null , methodTestDescriptor ,
176
206
configuration , extensionRegistry , new OpenTest4JAwareThrowableCollector ());
177
- methodExtensionContext .setTestInstances (DefaultTestInstances .of (new OuterClass ()));
207
+ methodExtensionContext .setTestInstances (DefaultTestInstances .of (new OuterClassTestCase ()));
178
208
assertThat (methodExtensionContext .getTags ()).containsExactlyInAnyOrder ("outer-tag" , "method-tag" );
179
209
assertThat (methodExtensionContext .getRoot ()).isSameAs (outerExtensionContext );
180
210
}
181
211
182
212
@ Test
183
- @ SuppressWarnings ("resource" )
184
213
void fromMethodTestDescriptor () {
185
214
var methodTestDescriptor = methodDescriptor ();
186
215
var classTestDescriptor = outerClassDescriptor (methodTestDescriptor );
187
216
var engineDescriptor = new JupiterEngineDescriptor (UniqueId .forEngine ("junit-jupiter" ), configuration );
188
217
engineDescriptor .addChild (classTestDescriptor );
189
218
190
- Object testInstance = new OuterClass ();
219
+ Object testInstance = new OuterClassTestCase ();
191
220
var testMethod = methodTestDescriptor .getTestMethod ();
192
221
193
222
var engineExtensionContext = new JupiterEngineExtensionContext (null , engineDescriptor , configuration ,
@@ -201,10 +230,11 @@ void fromMethodTestDescriptor() {
201
230
// @formatter:off
202
231
assertAll ("methodContext" ,
203
232
() -> assertThat (methodExtensionContext .getElement ()).contains (testMethod ),
204
- () -> assertThat (methodExtensionContext .getTestClass ()).contains (OuterClass .class ),
233
+ () -> assertThat (methodExtensionContext .getTestClass ()).contains (OuterClassTestCase .class ),
234
+ () -> assertThat (methodExtensionContext .getEnclosingTestClasses ()).isEmpty (),
205
235
() -> assertThat (methodExtensionContext .getTestInstance ()).contains (testInstance ),
206
236
() -> assertThat (methodExtensionContext .getTestMethod ()).contains (testMethod ),
207
- () -> assertThat (methodExtensionContext .getRequiredTestClass ()).isEqualTo (OuterClass .class ),
237
+ () -> assertThat (methodExtensionContext .getRequiredTestClass ()).isEqualTo (OuterClassTestCase .class ),
208
238
() -> assertThat (methodExtensionContext .getRequiredTestInstance ()).isEqualTo (testInstance ),
209
239
() -> assertThat (methodExtensionContext .getRequiredTestMethod ()).isEqualTo (testMethod ),
210
240
() -> assertThat (methodExtensionContext .getDisplayName ()).isEqualTo (methodTestDescriptor .getDisplayName ()),
@@ -359,7 +389,7 @@ void usingStore() {
359
389
extensionRegistry , null );
360
390
var childContext = new MethodExtensionContext (parentContext , null , methodTestDescriptor , configuration ,
361
391
extensionRegistry , new OpenTest4JAwareThrowableCollector ());
362
- childContext .setTestInstances (DefaultTestInstances .of (new OuterClass ()));
392
+ childContext .setTestInstances (DefaultTestInstances .of (new OuterClassTestCase ()));
363
393
364
394
var childStore = childContext .getStore (Namespace .GLOBAL );
365
395
var parentStore = parentContext .getStore (Namespace .GLOBAL );
@@ -430,13 +460,18 @@ void configurationParameter(Function<JupiterConfiguration, ? extends ExtensionCo
430
460
}
431
461
432
462
private NestedClassTestDescriptor nestedClassDescriptor () {
433
- return new NestedClassTestDescriptor (UniqueId .root ("nested-class" , "NestedClass" ), OuterClass .NestedClass .class ,
434
- List ::of , configuration );
463
+ return new NestedClassTestDescriptor (UniqueId .root ("nested-class" , "NestedClass" ),
464
+ OuterClassTestCase .NestedClass .class , List ::of , configuration );
465
+ }
466
+
467
+ private NestedClassTestDescriptor doublyNestedClassDescriptor () {
468
+ return new NestedClassTestDescriptor (UniqueId .root ("nested-class" , "DoublyNestedClass" ),
469
+ OuterClassTestCase .NestedClass .DoublyNestedClass .class , List ::of , configuration );
435
470
}
436
471
437
472
private ClassTestDescriptor outerClassDescriptor (TestDescriptor child ) {
438
- var classTestDescriptor = new ClassTestDescriptor (UniqueId .root ("class" , "OuterClass" ), OuterClass . class ,
439
- configuration );
473
+ var classTestDescriptor = new ClassTestDescriptor (UniqueId .root ("class" , "OuterClass" ),
474
+ OuterClassTestCase . class , configuration );
440
475
if (child != null ) {
441
476
classTestDescriptor .addChild (child );
442
477
}
@@ -445,19 +480,41 @@ private ClassTestDescriptor outerClassDescriptor(TestDescriptor child) {
445
480
446
481
private TestMethodTestDescriptor methodDescriptor () {
447
482
try {
448
- return new TestMethodTestDescriptor (UniqueId .root ("method" , "aMethod" ), OuterClass .class ,
449
- OuterClass .class .getDeclaredMethod ("aMethod" ), List ::of , configuration );
483
+ return new TestMethodTestDescriptor (UniqueId .root ("method" , "aMethod" ), OuterClassTestCase .class ,
484
+ OuterClassTestCase .class .getDeclaredMethod ("aMethod" ), List ::of , configuration );
450
485
}
451
486
catch (NoSuchMethodException e ) {
452
487
throw new RuntimeException (e );
453
488
}
454
489
}
455
490
491
+ private TestMethodTestDescriptor nestedMethodDescriptor () {
492
+ try {
493
+ return new TestMethodTestDescriptor (UniqueId .root ("method" , "nestedMethod" ),
494
+ OuterClassTestCase .NestedClass .class , BaseNestedTestCase .class .getDeclaredMethod ("nestedMethod" ),
495
+ List ::of , configuration );
496
+ }
497
+ catch (NoSuchMethodException e ) {
498
+ throw new RuntimeException (e );
499
+ }
500
+ }
501
+
502
+ static abstract class BaseNestedTestCase {
503
+ @ Test
504
+ void nestedMethod () {
505
+ }
506
+
507
+ @ Nested
508
+ class DoublyNestedClass {
509
+ }
510
+ }
511
+
456
512
@ Tag ("outer-tag" )
457
- static class OuterClass {
513
+ static class OuterClassTestCase {
458
514
459
515
@ Tag ("nested-tag" )
460
- static class NestedClass {
516
+ @ Nested
517
+ class NestedClass extends BaseNestedTestCase {
461
518
}
462
519
463
520
@ Tag ("method-tag" )
0 commit comments