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

Reply via email to