Skip to content

Commit a2c2dc1

Browse files
committed
Feedback Extensions and tests
1 parent 0e6efd8 commit a2c2dc1

File tree

3 files changed

+63
-56
lines changed

3 files changed

+63
-56
lines changed

junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/DefaultTimeZoneExtension.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,12 @@ private static void validateCorrectConfiguration(DefaultTimeZone annotation) {
6565
private static TimeZone createTimeZone(String timeZoneId) {
6666
TimeZone configuredTimeZone = TimeZone.getTimeZone(timeZoneId);
6767
// TimeZone::getTimeZone returns with GMT as fallback if the given ID cannot be understood
68-
if (configuredTimeZone.equals(TimeZone.getTimeZone("GMT")) && !timeZoneId.equals("GMT")) {
69-
throw new ExtensionConfigurationException(String.format(
70-
"@DefaultTimeZone not configured correctly. " + "Could not find the specified time zone + '%s'. "
71-
+ "Please use correct identifiers, e.g. \"GMT\" for Greenwich Mean Time.",
72-
timeZoneId));
68+
if (configuredTimeZone.equals(TimeZone.getTimeZone("GMT")) && !"GMT".equals(timeZoneId)) {
69+
throw new ExtensionConfigurationException("""
70+
@DefaultTimeZone not configured correctly.
71+
Could not find the specified time zone + '%s'.
72+
Please use correct identifiers, e.g. "GMT" for Greenwich Mean Time.
73+
""".formatted(timeZoneId));
7374
}
7475
return configuredTimeZone;
7576
}

jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/DefaultLocaleTests.java

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
import static org.assertj.core.api.Assertions.assertThat;
1414
import static org.junit.jupiter.testkit.JUnitJupiterTestKit.executeTestClass;
1515
import static org.junit.jupiter.testkit.JUnitJupiterTestKit.executeTestMethod;
16-
import static org.junit.jupiter.testkit.assertion.JUnitJupiterAssert.assertThat;
16+
import static org.junit.platform.testkit.engine.EventConditions.finishedWithFailure;
17+
import static org.junit.platform.testkit.engine.TestExecutionResultConditions.instanceOf;
18+
import static org.junit.platform.testkit.engine.TestExecutionResultConditions.message;
1719

1820
import java.util.Locale;
1921

@@ -108,7 +110,7 @@ void setsLanguageAndCountryAndVariant() {
108110
void shouldExecuteTestsWithConfiguredLocale() {
109111
ExecutionResults results = executeTestClass(ClassLevelTestCases.class);
110112

111-
assertThat(results).hasNumberOfSucceededTests(2);
113+
results.testEvents().assertThatEvents().haveExactly(2, null);
112114
}
113115

114116
@DefaultLocale(language = "fr", country = "FR")
@@ -228,8 +230,8 @@ void shouldFailWhenNothingIsConfigured() {
228230
ExecutionResults results = executeTestMethod(MethodLevelInitializationFailureTestCases.class,
229231
"shouldFailMissingConfiguration");
230232

231-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
232-
ExtensionConfigurationException.class);
233+
results.testEvents().assertThatEvents().haveExactly(1,
234+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class)));
233235
}
234236

235237
@Test
@@ -238,8 +240,8 @@ void shouldFailWhenVariantIsSetButCountryIsNot() {
238240
ExecutionResults results = executeTestMethod(MethodLevelInitializationFailureTestCases.class,
239241
"shouldFailMissingCountry");
240242

241-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
242-
ExtensionConfigurationException.class);
243+
results.testEvents().assertThatEvents().haveExactly(1,
244+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class)));
243245
}
244246

245247
@Test
@@ -248,8 +250,8 @@ void shouldFailWhenLanguageTagAndLanguageIsSet() {
248250
ExecutionResults results = executeTestMethod(MethodLevelInitializationFailureTestCases.class,
249251
"shouldFailLanguageTagAndLanguage");
250252

251-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
252-
ExtensionConfigurationException.class);
253+
results.testEvents().assertThatEvents().haveExactly(1,
254+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class)));
253255
}
254256

255257
@Test
@@ -258,8 +260,8 @@ void shouldFailWhenLanguageTagAndCountryIsSet() {
258260
ExecutionResults results = executeTestMethod(MethodLevelInitializationFailureTestCases.class,
259261
"shouldFailLanguageTagAndCountry");
260262

261-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
262-
ExtensionConfigurationException.class);
263+
results.testEvents().assertThatEvents().haveExactly(1,
264+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class)));
263265
}
264266

265267
@Test
@@ -268,8 +270,8 @@ void shouldFailWhenLanguageTagAndVariantIsSet() {
268270
ExecutionResults results = executeTestMethod(MethodLevelInitializationFailureTestCases.class,
269271
"shouldFailLanguageTagAndVariant");
270272

271-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
272-
ExtensionConfigurationException.class);
273+
results.testEvents().assertThatEvents().haveExactly(1,
274+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class)));
273275
}
274276

275277
@Test
@@ -278,8 +280,8 @@ void shouldFailIfNoValidBCP47VariantIsSet() {
278280
ExecutionResults results = executeTestMethod(MethodLevelInitializationFailureTestCases.class,
279281
"shouldFailNoValidBCP47Variant");
280282

281-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
282-
ExtensionConfigurationException.class);
283+
results.testEvents().assertThatEvents().haveExactly(1,
284+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class)));
283285
}
284286

285287
}
@@ -293,8 +295,8 @@ class ClassLevel {
293295
void shouldFailWhenVariantIsSetButCountryIsNot() {
294296
ExecutionResults results = executeTestClass(ClassLevelInitializationFailureTestCases.class);
295297

296-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
297-
ExtensionConfigurationException.class);
298+
results.testEvents().assertThatEvents().haveExactly(1,
299+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class)));
298300
}
299301

300302
}
@@ -378,8 +380,9 @@ void canUseProvider() {
378380
void providerReturnsNull() {
379381
ExecutionResults results = executeTestMethod(BadProviderTestCases.class, "returnsNull");
380382

381-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
382-
NullPointerException.class).hasMessageContaining("LocaleProvider instance returned with null");
383+
results.testEvents().assertThatEvents().haveExactly(1,
384+
finishedWithFailure(instanceOf(NullPointerException.class),
385+
message(it -> it.contains("LocaleProvider instance returned with null"))));
383386
}
384387

385388
@Test
@@ -388,9 +391,9 @@ void providerReturnsNull() {
388391
void mutuallyExclusiveWithValue() {
389392
ExecutionResults results = executeTestMethod(BadProviderTestCases.class, "mutuallyExclusiveWithValue");
390393

391-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
392-
ExtensionConfigurationException.class).hasMessageContaining(
393-
"can only be used with language tag if language, country, variant and provider are not set");
394+
results.testEvents().assertThatEvents().haveExactly(1,
395+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class), message(it -> it.contains(
396+
"can only be used with a provider if value, language, country and variant are not set."))));
394397
}
395398

396399
@Test
@@ -399,9 +402,9 @@ void mutuallyExclusiveWithValue() {
399402
void mutuallyExclusiveWithLanguage() {
400403
ExecutionResults results = executeTestMethod(BadProviderTestCases.class, "mutuallyExclusiveWithLanguage");
401404

402-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
403-
ExtensionConfigurationException.class).hasMessageContaining(
404-
"can only be used with language tag if provider is not set");
405+
results.testEvents().assertThatEvents().haveExactly(1,
406+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class),
407+
message(it -> it.contains("can only be used with language tag if provider is not set."))));
405408
}
406409

407410
@Test
@@ -410,9 +413,9 @@ void mutuallyExclusiveWithLanguage() {
410413
void mutuallyExclusiveWithCountry() {
411414
ExecutionResults results = executeTestMethod(BadProviderTestCases.class, "mutuallyExclusiveWithCountry");
412415

413-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
414-
ExtensionConfigurationException.class).hasMessageContaining(
415-
"can only be used with a provider if value, language, country and variant are not set.");
416+
results.testEvents().assertThatEvents().haveExactly(1,
417+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class), message(it -> it.contains(
418+
"can only be used with a provider if value, language, country and variant are not set."))));
416419
}
417420

418421
@Test
@@ -421,9 +424,9 @@ void mutuallyExclusiveWithCountry() {
421424
void mutuallyExclusiveWithVariant() {
422425
ExecutionResults results = executeTestMethod(BadProviderTestCases.class, "mutuallyExclusiveWithVariant");
423426

424-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
425-
ExtensionConfigurationException.class).hasMessageContaining(
426-
"can only be used with a provider if value, language, country and variant are not set.");
427+
results.testEvents().assertThatEvents().haveExactly(1,
428+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class), message(it -> it.contains(
429+
"can only be used with a provider if value, language, country and variant are not set."))));
427430
}
428431

429432
@Test
@@ -432,9 +435,9 @@ void mutuallyExclusiveWithVariant() {
432435
void badConstructor() {
433436
ExecutionResults results = executeTestMethod(BadProviderTestCases.class, "badConstructor");
434437

435-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
436-
ExtensionConfigurationException.class).hasMessageContaining(
437-
"could not be constructed because of an exception");
438+
results.testEvents().assertThatEvents().haveExactly(1,
439+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class),
440+
message(it -> it.contains("could not be constructed because of an exception"))));
438441
}
439442

440443
}
@@ -491,6 +494,7 @@ public Locale get() {
491494
static class ReturnsNullLocaleProvider implements LocaleProvider {
492495

493496
@Override
497+
@SuppressWarnings("NullAway")
494498
public Locale get() {
495499
return null;
496500
}

jupiter-tests/src/test/java/org/junit/jupiter/engine/extension/DefaultTimeZoneTests.java

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
import static org.assertj.core.api.Assertions.assertThat;
1414
import static org.junit.jupiter.testkit.JUnitJupiterTestKit.executeTestClass;
1515
import static org.junit.jupiter.testkit.JUnitJupiterTestKit.executeTestMethod;
16-
import static org.junit.jupiter.testkit.assertion.JUnitJupiterAssert.assertThat;
16+
import static org.junit.platform.testkit.engine.EventConditions.finishedWithFailure;
17+
import static org.junit.platform.testkit.engine.TestExecutionResultConditions.instanceOf;
18+
import static org.junit.platform.testkit.engine.TestExecutionResultConditions.message;
1719

1820
import java.util.TimeZone;
1921

@@ -208,10 +210,9 @@ class ConfigurationTests {
208210
void throwsWhenConfigurationIsBad() {
209211
ExecutionResults results = executeTestMethod(BadMethodLevelConfigurationTestCases.class,
210212
"badConfiguration");
211-
212-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
213-
ExtensionConfigurationException.class).hasMessageNotContaining(
214-
"should never execute").hasMessageContaining("@DefaultTimeZone not configured correctly.");
213+
results.testEvents().assertThatEvents().haveExactly(1,
214+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class),
215+
message(it -> it.contains("@DefaultTimeZone not configured correctly."))));
215216
}
216217

217218
@Test
@@ -220,9 +221,9 @@ void throwsWhenConfigurationIsBad() {
220221
void shouldThrowWithBadConfiguration() {
221222
ExecutionResults results = executeTestClass(BadClassLevelConfigurationTestCases.class);
222223

223-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
224-
ExtensionConfigurationException.class).hasMessageContaining(
225-
"@DefaultTimeZone not configured correctly.");
224+
results.testEvents().assertThatEvents().haveExactly(1,
225+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class),
226+
message(it -> it.contains("@DefaultTimeZone not configured correctly."))));
226227
}
227228

228229
@AfterEach
@@ -291,9 +292,9 @@ void defaultToGmt() {
291292
void throwsForMutuallyExclusiveOptions() {
292293
ExecutionResults results = executeTestMethod(BadTimeZoneProviderTestCases.class, "notExclusive");
293294

294-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
295-
ExtensionConfigurationException.class).hasMessageContaining(
296-
"Either a valid time zone id or a TimeZoneProvider must be provided");
295+
results.testEvents().assertThatEvents().haveExactly(1,
296+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class),
297+
message(it -> it.contains("Either a valid time zone id or a TimeZoneProvider must be provided"))));
297298
}
298299

299300
@Test
@@ -302,9 +303,9 @@ void throwsForMutuallyExclusiveOptions() {
302303
void throwsForEmptyOptions() {
303304
ExecutionResults results = executeTestMethod(BadTimeZoneProviderTestCases.class, "empty");
304305

305-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
306-
ExtensionConfigurationException.class).hasMessageContaining(
307-
"Either a valid time zone id or a TimeZoneProvider must be provided");
306+
results.testEvents().assertThatEvents().haveExactly(1,
307+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class),
308+
message(it -> it.contains("Either a valid time zone id or a TimeZoneProvider must be provided"))));
308309
}
309310

310311
@Test
@@ -313,9 +314,9 @@ void throwsForEmptyOptions() {
313314
void throwsForBadConstructor() {
314315
ExecutionResults results = executeTestMethod(BadTimeZoneProviderTestCases.class, "noConstructor");
315316

316-
assertThat(results).hasSingleFailedTest().withExceptionInstanceOf(
317-
ExtensionConfigurationException.class).hasMessageContaining(
318-
"Could not instantiate TimeZoneProvider because of exception");
317+
results.testEvents().assertThatEvents().haveExactly(1,
318+
finishedWithFailure(instanceOf(ExtensionConfigurationException.class),
319+
message(it -> it.contains("Could not instantiate TimeZoneProvider because of exception"))));
319320
}
320321

321322
}
@@ -354,6 +355,7 @@ public TimeZone get() {
354355
static class NullProvider implements TimeZoneProvider {
355356

356357
@Override
358+
@SuppressWarnings("NullAway")
357359
public TimeZone get() {
358360
return null;
359361
}
@@ -364,7 +366,7 @@ static class ComplicatedProvider implements TimeZoneProvider {
364366

365367
private final String timeZoneString;
366368

367-
public ComplicatedProvider(String timeZoneString) {
369+
ComplicatedProvider(String timeZoneString) {
368370
this.timeZoneString = timeZoneString;
369371
}
370372

0 commit comments

Comments
 (0)