index--;
}
int padding = minDigits - (limit - index);
- for (; padding > 0; padding--) {
+ while (padding > 0 && index > 0) {
decimalBuf[--index] = zeroDigit;
+ padding--;
}
- int length = limit - index;
- buf.append(decimalBuf, index, length);
+ while (padding > 0) {
+ // when pattern width is longer than decimalBuf, need extra
+ // leading zeros - ticke#7595
+ buf.append(zeroDigit);
+ padding--;
+ }
+ buf.append(decimalBuf, index, limit - index);
}
/**
errln("DateFormat.getPatternInstance is not suppose to return an exception.");
}
}
-
+
+ /*
+ * Test case for very long numeric field patterns (ticket#7595)
+ */
+ public void TestLongNumericPattern() {
+ String DATA[] = {
+ "yyyy MM dd",
+
+ "yyyy.MM.dd", "fp", "2010 04 01",
+ "2010.04.01", "2010 04 01",
+
+ "yyyyyyyyyy.MM.dd", "fp", "2010 04 01",
+ "0000002010.04.01", "2010 04 01",
+
+ "yyyyyyyyyyy.MM.dd", "fp", "2010 04 01",
+ "00000002010.04.01", "2010 04 01",
+
+ "yyyyyyyyyyy.M.dddddddddd", "fp", "2010 04 01",
+ "00000002010.4.0000000001", "2010 04 01",
+
+ "y.M.ddddddddddd", "fp", "2010 10 11",
+ "2010.10.00000000011", "2010 10 11",
+ };
+ expect(DATA, new Locale("en", "", ""));
+ }
}