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 3d662f052b5f0d62fc30e2e89e697c3637f644f4
Author: Gary Gregory <[email protected]>
AuthorDate: Mon Jul 27 22:12:56 2026 +0000

    [LANG-1833] Handle ParsePosition index beyond source string length
    cleanly (#1757).
    
    Sort members
---
 .../apache/commons/lang3/time/DateUtilsTest.java   | 86 +++++++++++-----------
 .../commons/lang3/time/FastDateParserTest.java     | 22 +++---
 2 files changed, 54 insertions(+), 54 deletions(-)

diff --git a/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java 
b/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java
index 45fe80908..69af27687 100644
--- a/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/DateUtilsTest.java
@@ -1649,49 +1649,6 @@ void testTruncate_Bugzilla_31395() throws Exception {
         assertEquals(0, cal.get(Calendar.HOUR));
     }
 
-    /**
-     * Tests for LANG-59
-     *
-     * see https://issues.apache.org/jira/browse/LANG-59
-     */
-    @Test
-    void testTruncateLang59() {
-        // Set TimeZone to Mountain Time
-        final TimeZone denverZone = TimeZones.getTimeZone("America/Denver");
-        TimeZone.setDefault(denverZone);
-        final DateFormat format = new SimpleDateFormat("yyyy-MM-dd 
HH:mm:ss.SSS XXX");
-        format.setTimeZone(denverZone);
-        final Date oct31_01MDT = new Date(1099206000000L);
-        final Date oct31MDT = new Date(oct31_01MDT.getTime() - 3600000L); // - 
1 hour
-        final Date oct31_01_02MDT = new Date(oct31_01MDT.getTime() + 120000L); 
// + 2 minutes
-        final Date oct31_01_02_03MDT = new Date(oct31_01_02MDT.getTime() + 
3000L); // + 3 seconds
-        final Date oct31_01_02_03_04MDT = new Date(oct31_01_02_03MDT.getTime() 
+ 4L); // + 4 milliseconds
-        assertEquals("2004-10-31 00:00:00.000 -06:00", 
format.format(oct31MDT), "Check 00:00:00.000");
-        assertEquals("2004-10-31 01:00:00.000 -06:00", 
format.format(oct31_01MDT), "Check 01:00:00.000");
-        assertEquals("2004-10-31 01:02:00.000 -06:00", 
format.format(oct31_01_02MDT), "Check 01:02:00.000");
-        assertEquals("2004-10-31 01:02:03.000 -06:00", 
format.format(oct31_01_02_03MDT), "Check 01:02:03.000");
-        assertEquals("2004-10-31 01:02:03.004 -06:00", 
format.format(oct31_01_02_03_04MDT), "Check 01:02:03.004");
-        // Demonstrate Problem
-        final Calendar gval = Calendar.getInstance();
-        gval.setTime(new Date(oct31_01MDT.getTime()));
-        gval.set(Calendar.MINUTE, gval.get(Calendar.MINUTE)); // set minutes 
to the same value
-        assertEquals(gval.getTime().getTime(), oct31_01MDT.getTime() + 
3600000L, "Demonstrate Problem");
-        // Test Truncate
-        assertEquals(oct31_01_02_03_04MDT, 
DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.MILLISECOND), "Truncate 
Calendar.MILLISECOND");
-        assertEquals(oct31_01_02_03MDT, 
DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.SECOND), "Truncate 
Calendar.SECOND");
-        assertEquals(oct31_01_02MDT, DateUtils.truncate(oct31_01_02_03_04MDT, 
Calendar.MINUTE), "Truncate Calendar.MINUTE");
-        assertEquals(oct31_01MDT, DateUtils.truncate(oct31_01_02_03_04MDT, 
Calendar.HOUR_OF_DAY), "Truncate Calendar.HOUR_OF_DAY");
-        assertEquals(oct31_01MDT, DateUtils.truncate(oct31_01_02_03_04MDT, 
Calendar.HOUR), "Truncate Calendar.HOUR");
-        assertEquals(oct31MDT, DateUtils.truncate(oct31_01_02_03_04MDT, 
Calendar.DATE), "Truncate Calendar.DATE");
-        // Test Round (down)
-        assertEquals(oct31_01_02_03_04MDT, 
DateUtils.round(oct31_01_02_03_04MDT, Calendar.MILLISECOND), "Round 
Calendar.MILLISECOND");
-        assertEquals(oct31_01_02_03MDT, DateUtils.round(oct31_01_02_03_04MDT, 
Calendar.SECOND), "Round Calendar.SECOND");
-        assertEquals(oct31_01_02MDT, DateUtils.round(oct31_01_02_03_04MDT, 
Calendar.MINUTE), "Round Calendar.MINUTE");
-        assertEquals(oct31_01MDT, DateUtils.round(oct31_01_02_03_04MDT, 
Calendar.HOUR_OF_DAY), "Round Calendar.HOUR_OF_DAY");
-        assertEquals(oct31_01MDT, DateUtils.round(oct31_01_02_03_04MDT, 
Calendar.HOUR), "Round Calendar.HOUR");
-        assertEquals(oct31MDT, DateUtils.round(oct31_01_02_03_04MDT, 
Calendar.DATE), "Round Calendar.DATE");
-    }
-
     @Test
     public void testTruncatedCompareToCalendar() {
         final Calendar cal1 = Calendar.getInstance();
@@ -1757,6 +1714,49 @@ public void testTruncatedEqualDate() {
         assertThrows(NullPointerException.class, () -> 
DateUtils.truncatedEquals(date1, null, Calendar.DAY_OF_MONTH));
     }
 
+    /**
+     * Tests for LANG-59
+     *
+     * see https://issues.apache.org/jira/browse/LANG-59
+     */
+    @Test
+    void testTruncateLang59() {
+        // Set TimeZone to Mountain Time
+        final TimeZone denverZone = TimeZones.getTimeZone("America/Denver");
+        TimeZone.setDefault(denverZone);
+        final DateFormat format = new SimpleDateFormat("yyyy-MM-dd 
HH:mm:ss.SSS XXX");
+        format.setTimeZone(denverZone);
+        final Date oct31_01MDT = new Date(1099206000000L);
+        final Date oct31MDT = new Date(oct31_01MDT.getTime() - 3600000L); // - 
1 hour
+        final Date oct31_01_02MDT = new Date(oct31_01MDT.getTime() + 120000L); 
// + 2 minutes
+        final Date oct31_01_02_03MDT = new Date(oct31_01_02MDT.getTime() + 
3000L); // + 3 seconds
+        final Date oct31_01_02_03_04MDT = new Date(oct31_01_02_03MDT.getTime() 
+ 4L); // + 4 milliseconds
+        assertEquals("2004-10-31 00:00:00.000 -06:00", 
format.format(oct31MDT), "Check 00:00:00.000");
+        assertEquals("2004-10-31 01:00:00.000 -06:00", 
format.format(oct31_01MDT), "Check 01:00:00.000");
+        assertEquals("2004-10-31 01:02:00.000 -06:00", 
format.format(oct31_01_02MDT), "Check 01:02:00.000");
+        assertEquals("2004-10-31 01:02:03.000 -06:00", 
format.format(oct31_01_02_03MDT), "Check 01:02:03.000");
+        assertEquals("2004-10-31 01:02:03.004 -06:00", 
format.format(oct31_01_02_03_04MDT), "Check 01:02:03.004");
+        // Demonstrate Problem
+        final Calendar gval = Calendar.getInstance();
+        gval.setTime(new Date(oct31_01MDT.getTime()));
+        gval.set(Calendar.MINUTE, gval.get(Calendar.MINUTE)); // set minutes 
to the same value
+        assertEquals(gval.getTime().getTime(), oct31_01MDT.getTime() + 
3600000L, "Demonstrate Problem");
+        // Test Truncate
+        assertEquals(oct31_01_02_03_04MDT, 
DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.MILLISECOND), "Truncate 
Calendar.MILLISECOND");
+        assertEquals(oct31_01_02_03MDT, 
DateUtils.truncate(oct31_01_02_03_04MDT, Calendar.SECOND), "Truncate 
Calendar.SECOND");
+        assertEquals(oct31_01_02MDT, DateUtils.truncate(oct31_01_02_03_04MDT, 
Calendar.MINUTE), "Truncate Calendar.MINUTE");
+        assertEquals(oct31_01MDT, DateUtils.truncate(oct31_01_02_03_04MDT, 
Calendar.HOUR_OF_DAY), "Truncate Calendar.HOUR_OF_DAY");
+        assertEquals(oct31_01MDT, DateUtils.truncate(oct31_01_02_03_04MDT, 
Calendar.HOUR), "Truncate Calendar.HOUR");
+        assertEquals(oct31MDT, DateUtils.truncate(oct31_01_02_03_04MDT, 
Calendar.DATE), "Truncate Calendar.DATE");
+        // Test Round (down)
+        assertEquals(oct31_01_02_03_04MDT, 
DateUtils.round(oct31_01_02_03_04MDT, Calendar.MILLISECOND), "Round 
Calendar.MILLISECOND");
+        assertEquals(oct31_01_02_03MDT, DateUtils.round(oct31_01_02_03_04MDT, 
Calendar.SECOND), "Round Calendar.SECOND");
+        assertEquals(oct31_01_02MDT, DateUtils.round(oct31_01_02_03_04MDT, 
Calendar.MINUTE), "Round Calendar.MINUTE");
+        assertEquals(oct31_01MDT, DateUtils.round(oct31_01_02_03_04MDT, 
Calendar.HOUR_OF_DAY), "Round Calendar.HOUR_OF_DAY");
+        assertEquals(oct31_01MDT, DateUtils.round(oct31_01_02_03_04MDT, 
Calendar.HOUR), "Round Calendar.HOUR");
+        assertEquals(oct31MDT, DateUtils.round(oct31_01_02_03_04MDT, 
Calendar.DATE), "Round Calendar.DATE");
+    }
+
     /**
      * Tests the calendar iterator for week ranges
      */
diff --git 
a/src/test/java/org/apache/commons/lang3/time/FastDateParserTest.java 
b/src/test/java/org/apache/commons/lang3/time/FastDateParserTest.java
index 2cf6ebf8a..4c3c1538c 100644
--- a/src/test/java/org/apache/commons/lang3/time/FastDateParserTest.java
+++ b/src/test/java/org/apache/commons/lang3/time/FastDateParserTest.java
@@ -563,6 +563,17 @@ void testParseNumerics(final TriFunction<String, TimeZone, 
Locale, DateParser> d
         assertEquals(cal.getTime(), fdf.parse("20030210153320989"));
     }
 
+    @Test
+    void testParseOffset() {
+        final DateParser parser = getInstance(YMD_SLASH);
+        final Date date = parser.parse("Today is 2015/07/04", new 
ParsePosition(9));
+
+        final Calendar cal = Calendar.getInstance();
+        cal.clear();
+        cal.set(2015, Calendar.JULY, 4);
+        assertEquals(cal.getTime(), date);
+    }
+
     @Test
     public void testParsePositionBeyondInputLength() {
         final String source = "Jan";
@@ -584,17 +595,6 @@ public void testParsePositionBeyondInputLength() {
         }
     }
 
-    @Test
-    void testParseOffset() {
-        final DateParser parser = getInstance(YMD_SLASH);
-        final Date date = parser.parse("Today is 2015/07/04", new 
ParsePosition(9));
-
-        final Calendar cal = Calendar.getInstance();
-        cal.clear();
-        cal.set(2015, Calendar.JULY, 4);
-        assertEquals(cal.getTime(), date);
-    }
-
     @CartesianTest
     @CartesianTest.MethodFactory("testParsesFactory")
     // Check that all Locales can parse the formats we use

Reply via email to