commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From s...@apache.org
Subject svn commit: r1663438 - in /commons/proper/lang/trunk/src: changes/changes.xml main/java/org/apache/commons/lang3/time/FastDateParser.java test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java
Date Mon, 02 Mar 2015 21:28:13 GMT
Author: sebb
Date: Mon Mar  2 21:28:13 2015
New Revision: 1663438

URL: http://svn.apache.org/r1663438
Log:
LANG-1090 FastDateParser does not set error indication in ParsePosition

Modified:
    commons/proper/lang/trunk/src/changes/changes.xml
    commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/FastDateParser.java
    commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java

Modified: commons/proper/lang/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/changes/changes.xml?rev=1663438&r1=1663437&r2=1663438&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/changes/changes.xml [utf-8] (original)
+++ commons/proper/lang/trunk/src/changes/changes.xml [utf-8] Mon Mar  2 21:28:13 2015
@@ -22,6 +22,7 @@
   <body>
 
   <release version="3.4" date="tba" description="tba">
+    <action issue="LANG-1090" type="fix" dev="sebb">FastDateParser does not set error
indication in ParsePosition</action>
     <action issue="LANG-1089" type="fix" dev="sebb">FastDateParser does not handle
excess hours as per SimpleDateFormat</action>
     <action issue="LANG-1061" type="fix" dev="sebb" due-to="dmeneses">FastDateParser
error - timezones not handled correctly</action>
     <action issue="LANG-1087" type="fix" dev="britter" due-to="Renat Zhilkibaev">NumberUtils#createNumber()
returns positive BigDecimal when negative Float is expected</action>

Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/FastDateParser.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/FastDateParser.java?rev=1663438&r1=1663437&r2=1663438&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/FastDateParser.java
(original)
+++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/time/FastDateParser.java
Mon Mar  2 21:28:13 2015
@@ -311,8 +311,17 @@ public class FastDateParser implements D
         return parse(source, pos);
     }
 
-    /* (non-Javadoc)
+    /**
+     * This implementation updates the ParsePosition if the parse succeeeds.
+     * However, unlike the method {@link java.text.SimpleDateFormat#parse(String, ParsePosition)}
+     * it is not able to set the error Index - i.e. {@link ParsePosition#getErrorIndex()}
-  if the parse fails.
+     * <p>
+     * To determine if the parse has succeeded, the caller must check if the current parse
position
+     * given by {@link ParsePosition#getIndex()} has been updated. If the input buffer has
been fully
+     * parsed, then the index will point to just after the end of the input buffer.
+     *
      * @see org.apache.commons.lang3.time.DateParser#parse(java.lang.String, java.text.ParsePosition)
+     * {@inheritDoc}
      */
     @Override
     public Date parse(final String source, final ParsePosition pos) {

Modified: commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java
URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java?rev=1663438&r1=1663437&r2=1663438&view=diff
==============================================================================
--- commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java
(original)
+++ commons/proper/lang/trunk/src/test/java/org/apache/commons/lang3/time/FastDateParserSDFTest.java
Mon Mar  2 21:28:13 2015
@@ -19,6 +19,7 @@ package org.apache.commons.lang3.time;
 import static org.junit.Assert.*;
 
 import java.text.ParseException;
+import java.text.ParsePosition;
 import java.text.SimpleDateFormat;
 import java.util.Arrays;
 import java.util.Collection;
@@ -122,16 +123,32 @@ public class FastDateParserSDFTest {
     }
 
     @Test
+    public void testOriginalPP() throws Exception {
+        checkParsePosition(input);
+    }
+
+    @Test
     public void testUpperCase() throws Exception {
         checkParse(input.toUpperCase(locale));
     }
 
     @Test
+    public void testUpperCasePP() throws Exception {
+        checkParsePosition(input.toUpperCase(locale));
+    }
+
+    @Test
     @Ignore // not currently supported
     public void testLowerCase() throws Exception {
         checkParse(input.toLowerCase(locale));
     }
 
+    @Test
+    @Ignore // not currently supported
+    public void testLowerCasePP() throws Exception {
+        checkParsePosition(input.toLowerCase(locale));
+    }
+
     private void checkParse(final String formattedDate) throws ParseException {
         final SimpleDateFormat sdf = new SimpleDateFormat(format, locale);
         sdf.setTimeZone(timeZone);
@@ -172,4 +189,45 @@ public class FastDateParserSDFTest {
             assertEquals(locale.toString()+" "+formattedDate + " expected same Exception
", sdfE, fdfE);            
         }
     }
+    private void checkParsePosition(final String formattedDate) throws ParseException {
+        final SimpleDateFormat sdf = new SimpleDateFormat(format, locale);
+        sdf.setTimeZone(timeZone);
+        final DateParser fdf = new FastDateParser(format, timeZone, locale);
+
+        ParsePosition sdfP = new ParsePosition(0);
+        Date expectedTime = sdf.parse(formattedDate, sdfP);
+        if (valid) {
+            assertEquals("Expected SDF error index -1 ", -1, sdfP.getErrorIndex());
+            final int endIndex = sdfP.getIndex();
+            final int length = formattedDate.length();
+            if (endIndex != length) {
+                // Error in test data
+                throw new RuntimeException("Test data error: expected SDF parse to consume
entire string; endindex " + endIndex + " != " + length);                
+            }
+        } else {
+            final int errorIndex = sdfP.getErrorIndex();
+            if (errorIndex == -1) {
+                throw new RuntimeException("Test data error: expected SDF parse to fail,
but got " + expectedTime);                
+            }
+        }
+
+        final ParsePosition fdfP = new ParsePosition(0);
+        Date actualTime = fdf.parse(formattedDate, fdfP);
+        final int fdferrorIndex = fdfP.getErrorIndex();
+        if (valid) {
+            assertEquals("Expected FDF error index -1 ", -1, fdferrorIndex);
+            final int endIndex = fdfP.getIndex();
+            final int length = formattedDate.length();
+            assertEquals("Expected FDF to parse full string " + fdfP, length, endIndex);
+            assertEquals(locale.toString()+" "+formattedDate +"\n",expectedTime, actualTime);
           
+        } else {
+            final int endIndex = fdfP.getIndex();
+            if (endIndex != -0) {
+                fail("Expected FDF parse to fail, but got " + fdfP);                
+            }
+            if (fdferrorIndex != -1) {
+                assertEquals("FDF error index should match SDF index (if it is set)", sdfP.getErrorIndex(),
fdferrorIndex);
+            }
+        }        
+    }
 }



Mime
View raw message