|
40 | 40 | import org.junit.jupiter.api.BeforeEach;
|
41 | 41 | import org.junit.jupiter.api.DynamicTest;
|
42 | 42 | import org.junit.jupiter.api.Nested;
|
| 43 | +import org.junit.jupiter.api.Order; |
43 | 44 | import org.junit.jupiter.api.Test;
|
44 | 45 | import org.junit.jupiter.api.TestFactory;
|
45 | 46 | import org.junit.jupiter.api.TestInfo;
|
|
49 | 50 | import org.junit.jupiter.api.extension.BeforeAllCallback;
|
50 | 51 | import org.junit.jupiter.api.extension.BeforeEachCallback;
|
51 | 52 | import org.junit.jupiter.api.extension.ExtendWith;
|
| 53 | +import org.junit.jupiter.api.extension.Extension; |
52 | 54 | import org.junit.jupiter.api.extension.ExtensionContext;
|
53 | 55 | import org.junit.jupiter.api.extension.ParameterContext;
|
54 | 56 | import org.junit.jupiter.api.extension.ParameterResolutionException;
|
55 | 57 | import org.junit.jupiter.api.extension.ParameterResolver;
|
| 58 | +import org.junit.jupiter.api.extension.RegisterExtension; |
56 | 59 | import org.junit.jupiter.api.extension.TestTemplateInvocationContext;
|
57 | 60 | import org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider;
|
58 | 61 | import org.junit.jupiter.api.fixtures.TrackLogRecords;
|
@@ -135,22 +138,52 @@ void fieldsWithTestInstancePerClass() {
|
135 | 138 | void registrationOrder(LogRecordListener listener) {
|
136 | 139 | assertOneTestSucceeded(AllInOneWithTestInstancePerMethodTestCase.class);
|
137 | 140 | assertThat(getRegisteredLocalExtensions(listener))//
|
138 |
| - .containsExactly("StaticField", "ConstructorParameter", "BeforeAllParameter", "BeforeEachParameter", |
139 |
| - "AfterEachParameter", "AfterAllParameter", "TestParameter", "InstanceField"); |
| 141 | + .containsExactly(// |
| 142 | + "StaticField", // @ExtendWith on static field |
| 143 | + "ClassLevelExtension1", // @RegisterExtension on static field |
| 144 | + "ClassLevelExtension2", // @RegisterExtension on static field |
| 145 | + "ConstructorParameter", // @ExtendWith on parameter in constructor |
| 146 | + "BeforeAllParameter", // @ExtendWith on parameter in static @BeforeAll method |
| 147 | + "BeforeEachParameter", // @ExtendWith on parameter in @BeforeEach method |
| 148 | + "AfterEachParameter", // @ExtendWith on parameter in @AfterEach method |
| 149 | + "AfterAllParameter", // @ExtendWith on parameter in static @AfterAll method |
| 150 | + "TestParameter", // @ExtendWith on parameter in @Test method |
| 151 | + "InstanceField", // @ExtendWith on instance field |
| 152 | + "InstanceLevelExtension1", // @RegisterExtension on instance field |
| 153 | + "InstanceLevelExtension2"// @RegisterExtension on instance field |
| 154 | + ); |
140 | 155 |
|
141 | 156 | listener.clear();
|
142 | 157 | assertOneTestSucceeded(AllInOneWithTestInstancePerClassTestCase.class);
|
143 | 158 | assertThat(getRegisteredLocalExtensions(listener))//
|
144 |
| - .containsExactly("StaticField", "ConstructorParameter", "BeforeAllParameter", "BeforeEachParameter", |
145 |
| - "AfterEachParameter", "AfterAllParameter", "InstanceField", "TestParameter"); |
| 159 | + .containsExactly(// |
| 160 | + "StaticField", // @ExtendWith on static field |
| 161 | + "ClassLevelExtension1", // @RegisterExtension on static field |
| 162 | + "ClassLevelExtension2", // @RegisterExtension on static field |
| 163 | + "ConstructorParameter", // @ExtendWith on parameter in constructor |
| 164 | + "BeforeAllParameter", // @ExtendWith on parameter in static @BeforeAll method |
| 165 | + "BeforeEachParameter", // @ExtendWith on parameter in @BeforeEach method |
| 166 | + "AfterEachParameter", // @ExtendWith on parameter in @AfterEach method |
| 167 | + "AfterAllParameter", // @ExtendWith on parameter in static @AfterAll method |
| 168 | + "InstanceField", // @ExtendWith on instance field |
| 169 | + "InstanceLevelExtension1", // @RegisterExtension on instance field |
| 170 | + "InstanceLevelExtension2", // @RegisterExtension on instance field |
| 171 | + "TestParameter" // @ExtendWith on parameter in @Test method |
| 172 | + ); |
146 | 173 | }
|
147 | 174 |
|
148 | 175 | private List<String> getRegisteredLocalExtensions(LogRecordListener listener) {
|
149 | 176 | // @formatter:off
|
150 | 177 | return listener.stream(MutableExtensionRegistry.class, Level.FINER)
|
151 | 178 | .map(LogRecord::getMessage)
|
152 | 179 | .filter(message -> message.contains("local extension"))
|
153 |
| - .map(message -> message.substring(message.lastIndexOf('.') + 1, message.indexOf("$"))) |
| 180 | + .map(message -> { |
| 181 | + message = message.replaceAll("from source .+", ""); |
| 182 | + int indexOfDollarSign = message.indexOf("$"); |
| 183 | + int indexOfAtSign = message.indexOf("@"); |
| 184 | + int endIndex = (indexOfDollarSign > 1 ? indexOfDollarSign : indexOfAtSign); |
| 185 | + return message.substring(message.lastIndexOf('.') + 1, endIndex); |
| 186 | + }) |
154 | 187 | .collect(toList());
|
155 | 188 | // @formatter:on
|
156 | 189 | }
|
@@ -568,6 +601,22 @@ static class AllInOneWithTestInstancePerMethodTestCase {
|
568 | 601 | @InstanceField
|
569 | 602 | String instanceField;
|
570 | 603 |
|
| 604 | + @RegisterExtension |
| 605 | + @Order(1) |
| 606 | + static Extension classLevelExtension1 = new ClassLevelExtension1(); |
| 607 | + |
| 608 | + @RegisterExtension |
| 609 | + @Order(2) |
| 610 | + static Extension classLevelExtension2 = new ClassLevelExtension2(); |
| 611 | + |
| 612 | + @RegisterExtension |
| 613 | + @Order(1) |
| 614 | + Extension instanceLevelExtension1 = new InstanceLevelExtension1(); |
| 615 | + |
| 616 | + @RegisterExtension |
| 617 | + @Order(2) |
| 618 | + Extension instanceLevelExtension2 = new InstanceLevelExtension2(); |
| 619 | + |
571 | 620 | AllInOneWithTestInstancePerMethodTestCase(@ConstructorParameter String text) {
|
572 | 621 | assertThat(text).isEqualTo("enigma");
|
573 | 622 | }
|
@@ -772,3 +821,15 @@ class Extension extends BaseFieldExtension<InstanceField> {
|
772 | 821 | class Extension extends BaseFieldExtension<StaticField> {
|
773 | 822 | }
|
774 | 823 | }
|
| 824 | + |
| 825 | +class ClassLevelExtension1 implements Extension { |
| 826 | +} |
| 827 | + |
| 828 | +class ClassLevelExtension2 implements Extension { |
| 829 | +} |
| 830 | + |
| 831 | +class InstanceLevelExtension1 implements Extension { |
| 832 | +} |
| 833 | + |
| 834 | +class InstanceLevelExtension2 implements Extension { |
| 835 | +} |
0 commit comments