This is an automated email from the ASF dual-hosted git repository. garydgregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-lang.git
commit b10be28d248ee40442bb718bb64d26be1ac82454 Author: Gary Gregory <[email protected]> AuthorDate: Sun Jun 7 08:31:25 2026 -0400 Refactor some tests --- .../time/FastDateParser_TimeZoneStrategyTest.java | 82 ++++++++++++---------- .../lang3/time/FastDatePrinterTimeZonesTest.java | 8 ++- 2 files changed, 49 insertions(+), 41 deletions(-) diff --git a/src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java b/src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java index 61f3cd540..3a73dea64 100644 --- a/src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java +++ b/src/test/java/org/apache/commons/lang3/time/FastDateParser_TimeZoneStrategyTest.java @@ -63,17 +63,18 @@ /* Make test reproducible */ @ReadsDefaultTimeZone class FastDateParser_TimeZoneStrategyTest extends AbstractLangTest { - private static final List<Locale> Java11Failures = new ArrayList<>(); - private static final List<Locale> Java17Failures = new ArrayList<>(); - private static final AtomicInteger fails = new AtomicInteger(); + private static final String UTC_FULL_NAME = "Coordinated Universal Time"; + private static final List<Locale> JAVA_11_FAILURES = new ArrayList<>(); + private static final List<Locale> JAVA_17_FAILURES = new ArrayList<>(); + private static final AtomicInteger FAILS = new AtomicInteger(); @AfterAll public static void afterAll() { - if (!Java17Failures.isEmpty()) { - System.err.printf("Actual failures on Java 17+: %,d%n%s%n", Java17Failures.size(), Java17Failures); + if (!JAVA_17_FAILURES.isEmpty()) { + System.err.printf("Actual failures on Java 17+: %,d%n%s%n", JAVA_17_FAILURES.size(), JAVA_17_FAILURES); } - if (!Java11Failures.isEmpty()) { - System.err.printf("Actual failures on Java 11: %,d%n%s%n", Java11Failures.size(), Java11Failures); + if (!JAVA_11_FAILURES.isEmpty()) { + System.err.printf("Actual failures on Java 11: %,d%n%s%n", JAVA_11_FAILURES.size(), JAVA_11_FAILURES); } } @@ -133,12 +134,35 @@ void testLang1219() throws ParseException { void testTimeZoneStrategy_DateFormatSymbols(final Locale locale) { testTimeZoneStrategyPattern_DateFormatSymbols_getZoneStrings(locale); } + @ParameterizedTest @MethodSource("org.apache.commons.lang3.LocaleUtils#availableLocaleList()") void testTimeZoneStrategy_TimeZone(final Locale locale) { testTimeZoneStrategyPattern_TimeZone_getAvailableIDs(locale); } + private void testTimeZoneStrategyPattern(final Locale locale, final String timeZoneId) { + final TimeZone timeZone = TimeZones.getTimeZone(timeZoneId); + final String displayName = timeZone.getDisplayName(locale); + final FastDateParser parser = new FastDateParser("z", timeZone, locale); + try { + parser.parse(displayName); + } catch (final ParseException e) { + final StringBuilder sb = new StringBuilder("chars: ["); + displayName.chars().forEach(c -> sb.append(c).append(", ")); + sb.append("], code points: ["); + displayName.codePoints().forEach(c -> sb.append(c).append(", ")); + sb.append("]"); + if (displayName.contains("\uFFFD")) { + System.err.printf("TimeZone ID %s displayName contains Unicode character 'REPLACEMENT CHARACTER' (U+FFFD) in '%s'%n", timeZoneId, displayName); + } else { + // Missing "Zulu" or something else in broken JDK's GH builds? + fail(String.format("displayName: '%s' for id: '%s', %s, exception: %s, %s, parser = %s", displayName, timeZoneId, sb.toString(), e, + toFailureMessage(locale, null, timeZone), parser.toStringAll())); + } + } + } + private void testTimeZoneStrategyPattern(final String languageTag, final String source) throws ParseException { final Locale locale = Locale.forLanguageTag(languageTag); final TimeZone timeZone = TimeZones.getTimeZone("Etc/UTC"); @@ -153,7 +177,6 @@ private void testTimeZoneStrategyPattern_DateFormatSymbols_getZoneStrings(final Objects.requireNonNull(locale, "locale"); assumeFalse(LocaleUtils.isLanguageUndetermined(locale), () -> toFailureMessage(locale, null, null)); assumeTrue(LocaleUtils.isAvailableLocale(locale), () -> toFailureMessage(locale, null, null)); - final String[][] zones = getZoneStringsSorted(locale); for (final String[] zone : zones) { for (int zIndex = 1; zIndex < zone.length; ++zIndex) { @@ -171,37 +194,38 @@ private void testTimeZoneStrategyPattern_DateFormatSymbols_getZoneStrings(final // See failures on GitHub Actions builds for Java 17. final String localeStr = locale.toString(); if (SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_17) - && (localeStr.contains("_") || "Coordinated Universal Time".equals(tzDisplay) - || "sommartid – Atyrau".equals(tzDisplay))) { - Java17Failures.add(locale); + && (localeStr.contains("_") || UTC_FULL_NAME.equals(tzDisplay) || "sommartid – Atyrau".equals(tzDisplay))) { + JAVA_17_FAILURES.add(locale); // Mark as an assumption failure instead of a hard fail + // @formatter:off System.err.printf( "[%,d][%s] Java %s %s - Mark as an assumption failure instead of a hard fail: locale = '%s', parse = '%s'%n", - fails.incrementAndGet(), + FAILS.incrementAndGet(), Thread.currentThread().getName(), SystemUtils.JAVA_VENDOR, SystemUtils.JAVA_VM_VERSION, localeStr, tzDisplay); + // @formatter:on assumeTrue(false, localeStr); continue; } - if (SystemUtils.IS_JAVA_11 - && (localeStr.contains("_") || "Coordinated Universal Time".equals(tzDisplay))) { - Java11Failures.add(locale); + if (SystemUtils.IS_JAVA_11 && (localeStr.contains("_") || UTC_FULL_NAME.equals(tzDisplay))) { + JAVA_11_FAILURES.add(locale); // Mark as an assumption failure instead of a hard fail + // @formatter:off System.err.printf( "[%,d][%s] Java %s %s - Mark as an assumption failure instead of a hard fail: locale = '%s', parse = '%s'%n", - fails.incrementAndGet(), + FAILS.incrementAndGet(), Thread.currentThread().getName(), SystemUtils.JAVA_VENDOR, SystemUtils.JAVA_VM_VERSION, localeStr, tzDisplay); + // @formatter:on assumeTrue(false, localeStr); continue; } // Hack End - fail(String.format("%s: with locale = %s, zIndex = %,d, tzDisplay = '%s', parser = '%s'", e, - localeStr, zIndex, tzDisplay, parser), e); + fail(String.format("%s: with locale = %s, zIndex = %,d, tzDisplay = '%s', parser = '%s'", e, localeStr, zIndex, tzDisplay, parser), e); } } } @@ -216,26 +240,8 @@ private void testTimeZoneStrategyPattern_TimeZone_getAvailableIDs(final Locale l Objects.requireNonNull(locale, "locale"); assumeFalse(LocaleUtils.isLanguageUndetermined(locale), () -> toFailureMessage(locale, null, null)); assumeTrue(LocaleUtils.isAvailableLocale(locale), () -> toFailureMessage(locale, null, null)); - for (final String id : TimeZones.SORTED_AVAILABLE_IDS) { - final TimeZone timeZone = TimeZones.getTimeZone(id); - final String displayName = timeZone.getDisplayName(locale); - final FastDateParser parser = new FastDateParser("z", timeZone, locale); - try { - parser.parse(displayName); - } catch (final ParseException e) { - final StringBuilder sb = new StringBuilder("chars: ["); - displayName.chars().forEach(c -> sb.append(c).append(", ")); - sb.append("], code points: ["); - displayName.codePoints().forEach(c -> sb.append(c).append(", ")); - sb.append("]"); - if (displayName.contains("\uFFFD")) { - System.err.printf("TimeZone ID %s displayName contains Unicode character 'REPLACEMENT CHARACTER' (U+FFFD) in '%s'%n", id, displayName); - } else { - // Missing "Zulu" or something else in broken JDK's GH builds? - fail(String.format("displayName: '%s' for id: '%s', %s, exception: %s, %s, parser = %s", displayName, id, sb.toString(), e, - toFailureMessage(locale, null, timeZone), parser.toStringAll())); - } - } + for (final String timeZoneId : TimeZones.SORTED_AVAILABLE_IDS) { + testTimeZoneStrategyPattern(locale, timeZoneId); } } diff --git a/src/test/java/org/apache/commons/lang3/time/FastDatePrinterTimeZonesTest.java b/src/test/java/org/apache/commons/lang3/time/FastDatePrinterTimeZonesTest.java index 8dd3e9f11..58b2c39cc 100644 --- a/src/test/java/org/apache/commons/lang3/time/FastDatePrinterTimeZonesTest.java +++ b/src/test/java/org/apache/commons/lang3/time/FastDatePrinterTimeZonesTest.java @@ -31,15 +31,17 @@ class FastDatePrinterTimeZonesTest extends AbstractLangTest { private static final String PATTERN = "h:mma z"; - public static Stream<TimeZone> data() { + /* + * A @MethodSource. + */ + static Stream<TimeZone> getTimeZonesSorted() { return Stream.of(TimeZones.SORTED_AVAILABLE_IDS).map(TimeZones::getTimeZone); } @ParameterizedTest - @MethodSource("data") + @MethodSource("getTimeZonesSorted") void testCalendarTimezoneRespected(final TimeZone timeZone) { final Calendar cal = Calendar.getInstance(timeZone); - final SimpleDateFormat sdf = new SimpleDateFormat(PATTERN); sdf.setTimeZone(timeZone); final String expectedValue = sdf.format(cal.getTime());
