This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 1.X in repository https://gitbox.apache.org/repos/asf/commons-beanutils.git
The following commit(s) were added to refs/heads/1.X by this push: new 38034853 Fix tests that current fail on Java 20 onwards 38034853 is described below commit 38034853592f21d4c2ca9f0987fe416d3cf9552f Author: Mark Thomas <ma...@apache.org> AuthorDate: Tue Nov 26 18:53:28 2024 +0000 Fix tests that current fail on Java 20 onwards --- .../converters/SqlTimeConverterTestCase.java | 26 +++++++++++++++++++--- .../converters/SqlTimestampConverterTestCase.java | 19 ++++++++++++++-- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/src/test/java/org/apache/commons/beanutils/converters/SqlTimeConverterTestCase.java b/src/test/java/org/apache/commons/beanutils/converters/SqlTimeConverterTestCase.java index 94baa5dc..d5200f43 100644 --- a/src/test/java/org/apache/commons/beanutils/converters/SqlTimeConverterTestCase.java +++ b/src/test/java/org/apache/commons/beanutils/converters/SqlTimeConverterTestCase.java @@ -18,6 +18,8 @@ package org.apache.commons.beanutils.converters; import java.sql.Time; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; @@ -59,6 +61,12 @@ public class SqlTimeConverterTestCase extends DateConverterTestBase { return Time.class; } + private boolean isUSTimeFormatWithNarrowNoBreakSpace() { + // Fix tests on Java 20 onwards. See https://bugs.openjdk.org/browse/JDK-8324308 for background. + DateFormat usDateFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.US); + return ((SimpleDateFormat) usDateFormat).toPattern().contains("\u202F"); + } + /** * Create the Converter with no default value. * @return A new Converter @@ -108,14 +116,22 @@ public class SqlTimeConverterTestCase extends DateConverterTestBase { final Locale defaultLocale = Locale.getDefault(); Locale.setDefault(Locale.US); - final String pattern = "h:mm a"; // SHORT style time format for US Locale + // SHORT style time format for US Locale + final String pattern; + // Valid String --> Type Conversion + final String testString; + if (isUSTimeFormatWithNarrowNoBreakSpace()) { + pattern = "h:mm\u202Fa"; + testString = "3:06\u202Fpm"; + } else { + pattern = "h:mm a"; + testString = "3:06 pm"; + } // Create & Configure the Converter final DateTimeConverter converter = makeConverter(); converter.setUseLocaleFormat(true); - // Valid String --> Type Conversion - final String testString = "3:06 pm"; final Object expected = toType(testString, pattern, null); validConversion(converter, expected, testString); @@ -123,8 +139,12 @@ public class SqlTimeConverterTestCase extends DateConverterTestBase { invalidConversion(converter, null); invalidConversion(converter, ""); invalidConversion(converter, "13:05"); + // Normal space invalidConversion(converter, "11:05 p"); invalidConversion(converter, "11.05 pm"); + // Narrow no-break space (Java 20 onwards) + invalidConversion(converter, "11:05\u202Fp"); + invalidConversion(converter, "11.05\\u202Fpm"); invalidConversion(converter, Integer.valueOf(2)); // Test specified Locale diff --git a/src/test/java/org/apache/commons/beanutils/converters/SqlTimestampConverterTestCase.java b/src/test/java/org/apache/commons/beanutils/converters/SqlTimestampConverterTestCase.java index ebfc2243..b84e2237 100644 --- a/src/test/java/org/apache/commons/beanutils/converters/SqlTimestampConverterTestCase.java +++ b/src/test/java/org/apache/commons/beanutils/converters/SqlTimestampConverterTestCase.java @@ -19,6 +19,7 @@ package org.apache.commons.beanutils.converters; import java.sql.Timestamp; import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; @@ -27,9 +28,7 @@ import junit.framework.TestSuite; /** * Test Case for the {@link SqlTimestampConverter} class. - * */ - public class SqlTimestampConverterTestCase extends DateConverterTestBase { /** @@ -68,6 +67,12 @@ public class SqlTimestampConverterTestCase extends DateConverterTestBase { return loc.format(new Date()).contains(","); } + private boolean isUSTimeFormatWithNarrowNoBreakSpace() { + // Fix tests on Java 20 onwards. See https://bugs.openjdk.org/browse/JDK-8324308 for background. + DateFormat usDateFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.US); + return ((SimpleDateFormat) usDateFormat).toPattern().contains("\u202F"); + } + /** * Create the Converter with no default value. * @return A new Converter @@ -135,6 +140,10 @@ public class SqlTimestampConverterTestCase extends DateConverterTestBase { pattern = "M/d/yy h:mm a"; testString = "3/21/06 3:06 PM"; } + if (isUSTimeFormatWithNarrowNoBreakSpace()) { + pattern = pattern.replace(" a", "\u202Fa"); + testString = testString.replace(" PM", "\u202FPM"); + } // Valid String --> Type Conversion @@ -144,9 +153,15 @@ public class SqlTimestampConverterTestCase extends DateConverterTestBase { // Invalid Conversions invalidConversion(converter, null); invalidConversion(converter, ""); + // Normal space invalidConversion(converter, "13:05 pm"); invalidConversion(converter, "11:05 p"); invalidConversion(converter, "11.05 pm"); + // Narrow no-break space (Java 20 onwards) + invalidConversion(converter, "13:05\u202Fpm"); + invalidConversion(converter, "11:05\\u202Fp"); + invalidConversion(converter, "11.05\\u202Fpm"); + invalidConversion(converter, Integer.valueOf(2)); // Restore the default Locale