}
return start + bestMatchLength;
}
- return -start;
+ return ~start;
}
private int regionMatchesWithOptionalDot(String text, int start, String data, int length) {
}
if (patternCharIndex == -1) {
- return -start;
+ return ~start;
}
currentNumberFormat = getNumberFormat(ch);
// of the string, then fail.
for (;;) {
if (start >= text.length()) {
- return -start;
+ return ~start;
}
int c = UTF16.charAt(text, start);
if (!UCharacter.isUWhiteSpace(c) || !PatternProps.isWhiteSpace(c)) {
if (!parsedNumericLeapMonth) {
if (obeyCount) {
if ((start+count) > text.length()) {
- return -start;
+ return ~start;
}
number = parseInt(text, count, pos, allowNegative,currentNumberFormat);
} else {
number = parseInt(text, pos, allowNegative,currentNumberFormat);
}
if (number == null && patternCharIndex != 30) {
- return -start;
+ return ~start;
}
}
cal.set(Calendar.YEAR, value);
return pos.getIndex();
}
- return -start;
+ return ~start;
case 2: // 'M' - MONTH
case 26: // 'L' - STAND_ALONE_MONTH
if (count <= 2) { // i.e., M/MM, L/LL
cal.setTimeZone(tz);
return pos.getIndex();
}
- return -start;
+ return ~start;
}
case 23: // 'Z' - TIMEZONE_RFC
{
cal.setTimeZone(tz);
return pos.getIndex();
}
- return -start;
+ return ~start;
}
case 24: // 'v' - TIMEZONE_GENERIC
{
cal.setTimeZone(tz);
return pos.getIndex();
}
- return -start;
+ return ~start;
}
case 29: // 'V' - TIMEZONE_SPECIAL
{
cal.setTimeZone(tz);
return pos.getIndex();
}
- return -start;
+ return ~start;
}
case 31: // 'O' - TIMEZONE_LOCALIZED_GMT_OFFSET
{
cal.setTimeZone(tz);
return pos.getIndex();
}
- return -start;
+ return ~start;
}
case 32: // 'X' - TIMEZONE_ISO
{
cal.setTimeZone(tz);
return pos.getIndex();
}
- return -start;
+ return ~start;
}
case 33: // 'x' - TIMEZONE_ISO_LOCAL
{
cal.setTimeZone(tz);
return pos.getIndex();
}
- return -start;
+ return ~start;
}
case 27: // 'Q' - QUARTER
if (count <= 2) { // i.e., Q or QQ.
cal.set(field, number.intValue());
return pos.getIndex();
}
- return -start;
+ return ~start;
}
}
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.text.ParsePosition;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
dateBit2 = myCal.getTimeInMillis();
assertFalse("Fail: error in setMillis, allowed invalid value : " + testMillis + "...returned dayOfMonth : " + dateBit1 + " millis : " + dateBit2, missedException);
}
-
+
+ /**
+ * Test case for ticket 9968
+ * subparse fails to return an error indication when start pos is 0
+ */
+ public void TestT9968() {
+ SimpleDateFormat sdf0 = new SimpleDateFormat("-MMMM");
+ ParsePosition pos0 = new ParsePosition(0);
+ Date d0 = sdf0.parse("-September", pos0);
+ logln("sdf0: "+pos0.getErrorIndex() + "/" + pos0.getIndex());
+ assertTrue("Fail: failed a good test", pos0.getErrorIndex() == -1);
+
+ SimpleDateFormat sdf1 = new SimpleDateFormat("-MMMM");
+ ParsePosition pos1 = new ParsePosition(0);
+ Date d1 = sdf1.parse("-????", pos1);
+ logln("sdf1: "+pos1.getErrorIndex() + "/" + pos1.getIndex());
+ assertTrue("Fail: failed to detect bad parse", pos1.getErrorIndex() == 1);
+
+ SimpleDateFormat sdf2 = new SimpleDateFormat("MMMM");
+ ParsePosition pos2 = new ParsePosition(0);
+ Date d2 = sdf2.parse("????", pos2);
+ logln("sdf2: "+pos2.getErrorIndex() + "/" + pos2.getIndex());
+ assertTrue("Fail: failed to detect bad parse", pos2.getErrorIndex() == 0);
+
+ }
}
//eof