--- old/test/java/time/tck/java/time/format/TCKDateTimeFormatter.java 2013-02-08 10:49:09.000000000 -0800 +++ new/test/java/time/tck/java/time/format/TCKDateTimeFormatter.java 2013-02-08 10:49:09.000000000 -0800 @@ -61,12 +61,13 @@ import static java.time.temporal.ChronoField.DAY_OF_MONTH; import static java.time.temporal.ChronoField.HOUR_OF_DAY; +import static java.time.temporal.ChronoField.MONTH_OF_YEAR; import static java.time.temporal.ChronoField.YEAR; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; +import static org.testng.Assert.fail; -import java.io.IOException; import java.text.Format; import java.text.ParseException; import java.text.ParsePosition; @@ -80,20 +81,16 @@ import java.time.ZoneId; import java.time.ZoneOffset; import java.time.ZonedDateTime; -import java.time.calendar.ThaiBuddhistChrono; +import java.time.chrono.ThaiBuddhistChronology; import java.time.format.DateTimeFormatSymbols; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; -import java.time.format.DateTimeFormatters; import java.time.format.DateTimeParseException; -import java.time.format.DateTimePrintException; import java.time.format.SignStyle; -import java.time.format.DateTimeBuilder; -import java.time.temporal.Chrono; -import java.time.temporal.ISOChrono; -import java.time.temporal.OffsetDate; -import java.time.temporal.OffsetDateTime; -import java.time.temporal.OffsetTime; +import java.time.chrono.Chronology; +import java.time.chrono.IsoChronology; +import java.time.OffsetDateTime; +import java.time.OffsetTime; import java.time.temporal.Temporal; import java.time.temporal.TemporalAccessor; import java.time.temporal.TemporalQuery; @@ -101,7 +98,6 @@ import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import test.java.time.format.MockIOExceptionAppendable; /** * Test DateTimeFormatter. @@ -113,8 +109,8 @@ private static final ZoneOffset OFFSET_PTHREE = ZoneOffset.ofHours(3); private static final ZoneId ZONE_PARIS = ZoneId.of("Europe/Paris"); - private static final DateTimeFormatter BASIC_FORMATTER = DateTimeFormatters.pattern("'ONE'd"); - private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatters.pattern("'ONE'yyyy MM dd"); + private static final DateTimeFormatter BASIC_FORMATTER = DateTimeFormatter.ofPattern("'ONE'd"); + private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("'ONE'yyyy MM dd"); private DateTimeFormatter fmt; @@ -141,13 +137,13 @@ //----------------------------------------------------------------------- @Test - public void test_withChrono() { + public void test_withChronology() { DateTimeFormatter test = fmt; - assertEquals(test.getChrono(), null); - test = test.withChrono(ISOChrono.INSTANCE); - assertEquals(test.getChrono(), ISOChrono.INSTANCE); - test = test.withChrono(null); - assertEquals(test.getChrono(), null); + assertEquals(test.getChronology(), null); + test = test.withChronology(IsoChronology.INSTANCE); + assertEquals(test.getChronology(), IsoChronology.INSTANCE); + test = test.withChronology(null); + assertEquals(test.getChronology(), null); } //----------------------------------------------------------------------- @@ -167,11 +163,10 @@ // print //----------------------------------------------------------------------- @DataProvider(name="print") - Object[][] data_print() { + Object[][] data_format() { LocalDate ld = LocalDate.of(2008, 6, 30); LocalTime lt = LocalTime.of(11, 30); LocalDateTime ldt = LocalDateTime.of(2008, 6, 30, 11, 30); - OffsetDate od = OffsetDate.of(LocalDate.of(2008, 6, 30), OFFSET_PONE); OffsetTime ot = OffsetTime.of(LocalTime.of(11, 30), OFFSET_PONE); OffsetDateTime odt = OffsetDateTime.of(LocalDateTime.of(2008, 6, 30, 11, 30), OFFSET_PONE); ZonedDateTime zdt = ZonedDateTime.of(LocalDateTime.of(2008, 6, 30, 11, 30), ZONE_PARIS); @@ -180,7 +175,6 @@ {null, null, ld, "2008::"}, {null, null, lt, ":11:"}, {null, null, ldt, "2008:11:"}, - {null, null, od, "2008::+01:00"}, {null, null, ot, ":11:+01:00"}, {null, null, odt, "2008:11:+01:00"}, {null, null, zdt, "2008:11:+02:00Europe/Paris"}, @@ -189,7 +183,6 @@ {null, ZONE_PARIS, ld, "2008::"}, {null, ZONE_PARIS, lt, ":11:"}, {null, ZONE_PARIS, ldt, "2008:11:"}, - {null, ZONE_PARIS, od, "2008::+01:00"}, {null, ZONE_PARIS, ot, ":11:+01:00"}, {null, ZONE_PARIS, odt, "2008:12:+02:00Europe/Paris"}, {null, ZONE_PARIS, zdt, "2008:11:+02:00Europe/Paris"}, @@ -198,61 +191,58 @@ {null, OFFSET_PTHREE, ld, "2008::"}, {null, OFFSET_PTHREE, lt, ":11:"}, {null, OFFSET_PTHREE, ldt, "2008:11:"}, - {null, OFFSET_PTHREE, od, "2008::+01:00"}, {null, OFFSET_PTHREE, ot, ":11:+01:00"}, {null, OFFSET_PTHREE, odt, "2008:13:+03:00"}, {null, OFFSET_PTHREE, zdt, "2008:12:+03:00"}, {null, OFFSET_PTHREE, instant, "1970:04:+03:00"}, - {ThaiBuddhistChrono.INSTANCE, null, ld, "2551::"}, - {ThaiBuddhistChrono.INSTANCE, null, lt, ":11:"}, - {ThaiBuddhistChrono.INSTANCE, null, ldt, "2551:11:"}, - {ThaiBuddhistChrono.INSTANCE, null, od, "2551::+01:00"}, - {ThaiBuddhistChrono.INSTANCE, null, ot, ":11:+01:00"}, - {ThaiBuddhistChrono.INSTANCE, null, odt, "2551:11:+01:00"}, - {ThaiBuddhistChrono.INSTANCE, null, zdt, "2551:11:+02:00Europe/Paris"}, - {ThaiBuddhistChrono.INSTANCE, null, instant, "::"}, - - {ThaiBuddhistChrono.INSTANCE, ZONE_PARIS, ld, "2551::"}, - {ThaiBuddhistChrono.INSTANCE, ZONE_PARIS, lt, ":11:"}, - {ThaiBuddhistChrono.INSTANCE, ZONE_PARIS, ldt, "2551:11:"}, - {ThaiBuddhistChrono.INSTANCE, ZONE_PARIS, od, "2551::+01:00"}, - {ThaiBuddhistChrono.INSTANCE, ZONE_PARIS, ot, ":11:+01:00"}, - {ThaiBuddhistChrono.INSTANCE, ZONE_PARIS, odt, "2551:12:+02:00Europe/Paris"}, - {ThaiBuddhistChrono.INSTANCE, ZONE_PARIS, zdt, "2551:11:+02:00Europe/Paris"}, - {ThaiBuddhistChrono.INSTANCE, ZONE_PARIS, instant, "1970:02:+01:00Europe/Paris"}, + {ThaiBuddhistChronology.INSTANCE, null, ld, "2551::"}, + {ThaiBuddhistChronology.INSTANCE, null, lt, ":11:"}, + {ThaiBuddhistChronology.INSTANCE, null, ldt, "2551:11:"}, + {ThaiBuddhistChronology.INSTANCE, null, ot, ":11:+01:00"}, + {ThaiBuddhistChronology.INSTANCE, null, odt, "2551:11:+01:00"}, + {ThaiBuddhistChronology.INSTANCE, null, zdt, "2551:11:+02:00Europe/Paris"}, + {ThaiBuddhistChronology.INSTANCE, null, instant, "::"}, + + {ThaiBuddhistChronology.INSTANCE, ZONE_PARIS, ld, "2551::"}, + {ThaiBuddhistChronology.INSTANCE, ZONE_PARIS, lt, ":11:"}, + {ThaiBuddhistChronology.INSTANCE, ZONE_PARIS, ldt, "2551:11:"}, + {ThaiBuddhistChronology.INSTANCE, ZONE_PARIS, ot, ":11:+01:00"}, + {ThaiBuddhistChronology.INSTANCE, ZONE_PARIS, odt, "2551:12:+02:00Europe/Paris"}, + {ThaiBuddhistChronology.INSTANCE, ZONE_PARIS, zdt, "2551:11:+02:00Europe/Paris"}, + {ThaiBuddhistChronology.INSTANCE, ZONE_PARIS, instant, "1970:02:+01:00Europe/Paris"}, }; } @Test(dataProvider="print") - public void test_print_Temporal(Chrono overrideChrono, ZoneId overrideZone, Temporal temporal, String expected) { + public void test_print_Temporal(Chronology overrideChrono, ZoneId overrideZone, Temporal temporal, String expected) { DateTimeFormatter test = new DateTimeFormatterBuilder() .optionalStart().appendValue(YEAR, 4).optionalEnd() .appendLiteral(':').optionalStart().appendValue(HOUR_OF_DAY, 2).optionalEnd() .appendLiteral(':').optionalStart().appendOffsetId().optionalStart().appendZoneRegionId().optionalEnd().optionalEnd() .toFormatter(Locale.ENGLISH) - .withChrono(overrideChrono).withZone(overrideZone); - String result = test.print(temporal); + .withChronology(overrideChrono).withZone(overrideZone); + String result = test.format(temporal); assertEquals(result, expected); } @Test public void test_print_Temporal_simple() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - String result = test.print(LocalDate.of(2008, 6, 30)); + String result = test.format(LocalDate.of(2008, 6, 30)); assertEquals(result, "ONE30"); } @Test(expectedExceptions=DateTimeException.class) public void test_print_Temporal_noSuchField() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - test.print(LocalTime.of(11, 30)); + test.format(LocalTime.of(11, 30)); } @Test(expectedExceptions=NullPointerException.class) public void test_print_Temporal_null() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - test.print((TemporalAccessor) null); + test.format((TemporalAccessor) null); } //----------------------------------------------------------------------- @@ -260,7 +250,7 @@ public void test_print_TemporalAppendable() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); StringBuilder buf = new StringBuilder(); - test.printTo(LocalDate.of(2008, 6, 30), buf); + test.formatTo(LocalDate.of(2008, 6, 30), buf); assertEquals(buf.toString(), "ONE30"); } @@ -268,33 +258,117 @@ public void test_print_TemporalAppendable_noSuchField() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); StringBuilder buf = new StringBuilder(); - test.printTo(LocalTime.of(11, 30), buf); + test.formatTo(LocalTime.of(11, 30), buf); } @Test(expectedExceptions=NullPointerException.class) public void test_print_TemporalAppendable_nullTemporal() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); StringBuilder buf = new StringBuilder(); - test.printTo((TemporalAccessor) null, buf); + test.formatTo((TemporalAccessor) null, buf); } @Test(expectedExceptions=NullPointerException.class) public void test_print_TemporalAppendable_nullAppendable() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - test.printTo(LocalDate.of(2008, 6, 30), (Appendable) null); + test.formatTo(LocalDate.of(2008, 6, 30), (Appendable) null); } - @Test(expectedExceptions=IOException.class) // IOException - public void test_print_TemporalAppendable_ioError() throws Exception { + //----------------------------------------------------------------------- + // parse(CharSequence) + //----------------------------------------------------------------------- + @Test + public void test_parse_CharSequence() { + DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); + TemporalAccessor result = test.parse("ONE30"); + assertEquals(result.isSupported(DAY_OF_MONTH), true); + assertEquals(result.getLong(DAY_OF_MONTH), 30L); + assertEquals(result.isSupported(HOUR_OF_DAY), false); + } + + @Test + public void test_parse_CharSequence_resolved() { + DateTimeFormatter test = DateTimeFormatter.ISO_DATE; + TemporalAccessor result = test.parse("2012-06-30"); + assertEquals(result.isSupported(YEAR), true); + assertEquals(result.isSupported(MONTH_OF_YEAR), true); + assertEquals(result.isSupported(DAY_OF_MONTH), true); + assertEquals(result.isSupported(HOUR_OF_DAY), false); + assertEquals(result.getLong(YEAR), 2012L); + assertEquals(result.getLong(MONTH_OF_YEAR), 6L); + assertEquals(result.getLong(DAY_OF_MONTH), 30L); + assertEquals(result.query(LocalDate::from), LocalDate.of(2012, 6, 30)); + } + + @Test(expectedExceptions=NullPointerException.class) + public void test_parse_CharSequence_null() { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); + test.parse((String) null); + } + + //----------------------------------------------------------------------- + // parse(CharSequence) + //----------------------------------------------------------------------- + @Test + public void test_parse_CharSequence_ParsePosition() { + DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); + ParsePosition pos = new ParsePosition(3); + TemporalAccessor result = test.parse("XXXONE30XXX", pos); + assertEquals(pos.getIndex(), 8); + assertEquals(pos.getErrorIndex(), -1); + assertEquals(result.isSupported(DAY_OF_MONTH), true); + assertEquals(result.getLong(DAY_OF_MONTH), 30L); + assertEquals(result.isSupported(HOUR_OF_DAY), false); + } + + @Test + public void test_parse_CharSequence_ParsePosition_resolved() { + DateTimeFormatter test = DateTimeFormatter.ISO_DATE; + ParsePosition pos = new ParsePosition(3); + TemporalAccessor result = test.parse("XXX2012-06-30XXX", pos); + assertEquals(pos.getIndex(), 13); + assertEquals(pos.getErrorIndex(), -1); + assertEquals(result.isSupported(YEAR), true); + assertEquals(result.isSupported(MONTH_OF_YEAR), true); + assertEquals(result.isSupported(DAY_OF_MONTH), true); + assertEquals(result.isSupported(HOUR_OF_DAY), false); + assertEquals(result.getLong(YEAR), 2012L); + assertEquals(result.getLong(MONTH_OF_YEAR), 6L); + assertEquals(result.getLong(DAY_OF_MONTH), 30L); + assertEquals(result.query(LocalDate::from), LocalDate.of(2012, 6, 30)); + } + + @Test(expectedExceptions=DateTimeParseException.class) + public void test_parse_CharSequence_ParsePosition_parseError() { + DateTimeFormatter test = DateTimeFormatter.ISO_DATE; + ParsePosition pos = new ParsePosition(3); try { - test.printTo(LocalDate.of(2008, 6, 30), new MockIOExceptionAppendable()); - } catch (DateTimePrintException ex) { - assertEquals(ex.getCause() instanceof IOException, true); - ex.rethrowIOException(); + test.parse("XXX2012XXX", pos); + fail(); + } catch (DateTimeParseException ex) { + assertEquals(ex.getErrorIndex(), 7); + throw ex; } } + @Test(expectedExceptions=IndexOutOfBoundsException.class) + public void test_parse_CharSequence_ParsePosition_indexTooBig() { + DateTimeFormatter test = DateTimeFormatter.ISO_DATE; + test.parse("Text", new ParsePosition(5)); + } + + @Test(expectedExceptions=NullPointerException.class) + public void test_parse_CharSequence_ParsePosition_nullText() { + DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); + test.parse((CharSequence) null, new ParsePosition(0)); + } + + @Test(expectedExceptions=NullPointerException.class) + public void test_parse_CharSequence_ParsePosition_nullParsePosition() { + DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); + test.parse("Text", (ParsePosition) null); + } + //----------------------------------------------------------------------- // parse(Query) //----------------------------------------------------------------------- @@ -363,23 +437,24 @@ //----------------------------------------------------------------------- @Test public void test_parseBest_firstOption() throws Exception { - DateTimeFormatter test = DateTimeFormatters.pattern("yyyy-MM-dd[ZZZ]"); - TemporalAccessor result = test.parseBest("2011-06-30+03:00", OffsetDate::from, LocalDate::from); - assertEquals(result, OffsetDate.of(LocalDate.of(2011, 6, 30), ZoneOffset.ofHours(3))); + DateTimeFormatter test = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm[XXX]"); + TemporalAccessor result = test.parseBest("2011-06-30 12:30+03:00", ZonedDateTime::from, LocalDateTime::from); + LocalDateTime ldt = LocalDateTime.of(2011, 6, 30, 12, 30); + assertEquals(result, ZonedDateTime.of(ldt, ZoneOffset.ofHours(3))); } @Test public void test_parseBest_secondOption() throws Exception { - DateTimeFormatter test = DateTimeFormatters.pattern("yyyy-MM-dd[ZZZ]"); - TemporalAccessor result = test.parseBest("2011-06-30", OffsetDate::from, LocalDate::from); + DateTimeFormatter test = DateTimeFormatter.ofPattern("yyyy-MM-dd[ HH:mm[XXX]]"); + TemporalAccessor result = test.parseBest("2011-06-30", ZonedDateTime::from, LocalDate::from); assertEquals(result, LocalDate.of(2011, 6, 30)); } @Test(expectedExceptions=DateTimeParseException.class) public void test_parseBest_String_parseError() throws Exception { - DateTimeFormatter test = DateTimeFormatters.pattern("yyyy-MM-dd[ZZZ]"); + DateTimeFormatter test = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm[XXX]"); try { - test.parseBest("2011-06-XX", OffsetDate::from, LocalDate::from); + test.parseBest("2011-06-XX", ZonedDateTime::from, LocalDateTime::from); } catch (DateTimeParseException ex) { assertEquals(ex.getMessage().contains("could not be parsed"), true); assertEquals(ex.getMessage().contains("XX"), true); @@ -393,7 +468,7 @@ public void test_parseBest_String_parseErrorLongText() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); try { - test.parseBest("ONEXXX67890123456789012345678901234567890123456789012345678901234567890123456789", LocalDate::from, OffsetDate::from); + test.parseBest("ONEXXX67890123456789012345678901234567890123456789012345678901234567890123456789", ZonedDateTime::from, LocalDate::from); } catch (DateTimeParseException ex) { assertEquals(ex.getMessage().contains("could not be parsed"), true); assertEquals(ex.getMessage().contains("ONEXXX6789012345678901234567890123456789012345678901234567890123..."), true); @@ -407,7 +482,7 @@ public void test_parseBest_String_parseIncomplete() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); try { - test.parseBest("ONE30SomethingElse", LocalDate::from, OffsetDate::from); + test.parseBest("ONE30SomethingElse", ZonedDateTime::from, LocalDate::from); } catch (DateTimeParseException ex) { assertEquals(ex.getMessage().contains("could not be parsed"), true); assertEquals(ex.getMessage().contains("ONE30SomethingElse"), true); @@ -420,7 +495,7 @@ @Test(expectedExceptions=NullPointerException.class) public void test_parseBest_String_nullText() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - test.parseBest((String) null, LocalDate::from, OffsetDate::from); + test.parseBest((String) null, ZonedDateTime::from, LocalDate::from); } @Test(expectedExceptions=NullPointerException.class) @@ -443,108 +518,65 @@ //----------------------------------------------------------------------- @Test - public void test_parseToBuilder_String() throws Exception { + public void test_parseUnresolved_StringParsePosition() { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - DateTimeBuilder result = test.parseToBuilder("ONE30"); - assertEquals(result.getFieldValueMap().size(), 1); - assertEquals(result.getFieldValue(DAY_OF_MONTH), 30L); - assertEquals(result.getCalendricalList().size(), 0); + ParsePosition pos = new ParsePosition(0); + TemporalAccessor result = test.parseUnresolved("ONE30XXX", pos); + assertEquals(pos.getIndex(), 5); + assertEquals(pos.getErrorIndex(), -1); + assertEquals(result.getLong(DAY_OF_MONTH), 30L); } @Test - public void test_parseToBuilder_CharSequence() throws Exception { + public void test_parseUnresolved_StringParsePosition_parseError() { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - DateTimeBuilder result = test.parseToBuilder(new StringBuilder("ONE30")); - assertEquals(result.getFieldValueMap().size(), 1); - assertEquals(result.getFieldValue(DAY_OF_MONTH), 30L); - assertEquals(result.getCalendricalList().size(), 0); - } - - @Test(expectedExceptions=DateTimeParseException.class) - public void test_parseToBuilder_String_parseError() throws Exception { - DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - try { - test.parseToBuilder("ONEXXX"); - } catch (DateTimeParseException ex) { - assertEquals(ex.getMessage().contains("ONEXXX"), true); - assertEquals(ex.getParsedString(), "ONEXXX"); - assertEquals(ex.getErrorIndex(), 3); - throw ex; - } - } - - @Test(expectedExceptions=DateTimeParseException.class) - public void test_parseToBuilder_String_parseErrorLongText() throws Exception { - DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - try { - test.parseToBuilder("ONEXXX67890123456789012345678901234567890123456789012345678901234567890123456789"); - } catch (DateTimeParseException ex) { - assertEquals(ex.getMessage().contains("ONEXXX6789012345678901234567890123456789012345678901234567890123..."), true); - assertEquals(ex.getParsedString(), "ONEXXX67890123456789012345678901234567890123456789012345678901234567890123456789"); - assertEquals(ex.getErrorIndex(), 3); - throw ex; - } - } - - @Test(expectedExceptions=DateTimeParseException.class) - public void test_parseToBuilder_String_parseIncomplete() throws Exception { - DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - try { - test.parseToBuilder("ONE30SomethingElse"); - } catch (DateTimeParseException ex) { - assertEquals(ex.getMessage().contains("ONE30SomethingElse"), true); - assertEquals(ex.getParsedString(), "ONE30SomethingElse"); - assertEquals(ex.getErrorIndex(), 5); - throw ex; - } - } - - @Test(expectedExceptions=NullPointerException.class) - public void test_parseToBuilder_String_null() throws Exception { - DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - test.parseToBuilder((String) null); + ParsePosition pos = new ParsePosition(0); + TemporalAccessor result = test.parseUnresolved("ONEXXX", pos); + assertEquals(pos.getIndex(), 0); + assertEquals(pos.getErrorIndex(), 3); + assertEquals(result, null); } - //----------------------------------------------------------------------- @Test - public void test_parseToBuilder_StringParsePosition() throws Exception { - DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - ParsePosition pos = new ParsePosition(0); - DateTimeBuilder result = test.parseToBuilder("ONE30XXX", pos); - assertEquals(pos.getIndex(), 5); + public void test_parseUnresolved_StringParsePosition_duplicateFieldSameValue() { + DateTimeFormatter test = new DateTimeFormatterBuilder() + .appendValue(MONTH_OF_YEAR).appendLiteral('-').appendValue(MONTH_OF_YEAR).toFormatter(); + ParsePosition pos = new ParsePosition(3); + TemporalAccessor result = test.parseUnresolved("XXX6-6", pos); + assertEquals(pos.getIndex(), 6); assertEquals(pos.getErrorIndex(), -1); - assertEquals(result.getFieldValueMap().size(), 1); - assertEquals(result.getFieldValueMap().get(DAY_OF_MONTH), Long.valueOf(30)); + assertEquals(result.getLong(MONTH_OF_YEAR), 6); } @Test - public void test_parseToBuilder_StringParsePosition_parseError() throws Exception { - DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - ParsePosition pos = new ParsePosition(0); - DateTimeBuilder result = test.parseToBuilder("ONEXXX", pos); - assertEquals(pos.getIndex(), 0); // TODO: is this right? - assertEquals(pos.getErrorIndex(), 3); + public void test_parseUnresolved_StringParsePosition_duplicateFieldDifferentValue() { + DateTimeFormatter test = new DateTimeFormatterBuilder() + .appendValue(MONTH_OF_YEAR).appendLiteral('-').appendValue(MONTH_OF_YEAR).toFormatter(); + ParsePosition pos = new ParsePosition(3); + TemporalAccessor result = test.parseUnresolved("XXX6-7", pos); + assertEquals(pos.getIndex(), 3); + assertEquals(pos.getErrorIndex(), 5); assertEquals(result, null); } @Test(expectedExceptions=NullPointerException.class) - public void test_parseToBuilder_StringParsePosition_nullString() throws Exception { + public void test_parseUnresolved_StringParsePosition_nullString() { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); ParsePosition pos = new ParsePosition(0); - test.parseToBuilder((String) null, pos); + test.parseUnresolved((String) null, pos); } @Test(expectedExceptions=NullPointerException.class) - public void test_parseToBuilder_StringParsePosition_nullParsePosition() throws Exception { + public void test_parseUnresolved_StringParsePosition_nullParsePosition() { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); - test.parseToBuilder("ONE30", (ParsePosition) null); + test.parseUnresolved("ONE30", (ParsePosition) null); } @Test(expectedExceptions=IndexOutOfBoundsException.class) - public void test_parseToBuilder_StringParsePosition_invalidPosition() throws Exception { + public void test_parseUnresolved_StringParsePosition_invalidPosition() { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); ParsePosition pos = new ParsePosition(6); - test.parseToBuilder("ONE30", pos); + test.parseUnresolved("ONE30", pos); } //----------------------------------------------------------------------- @@ -576,9 +608,9 @@ public void test_toFormat_parseObject_String() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); Format format = test.toFormat(); - DateTimeBuilder result = (DateTimeBuilder) format.parseObject("ONE30"); - assertEquals(result.getFieldValueMap().size(), 1); - assertEquals(result.getFieldValue(DAY_OF_MONTH), 30L); + TemporalAccessor result = (TemporalAccessor) format.parseObject("ONE30"); + assertEquals(result.isSupported(DAY_OF_MONTH), true); + assertEquals(result.getLong(DAY_OF_MONTH), 30L); } @Test(expectedExceptions=ParseException.class) @@ -621,11 +653,11 @@ DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD); Format format = test.toFormat(); ParsePosition pos = new ParsePosition(0); - DateTimeBuilder result = (DateTimeBuilder) format.parseObject("ONE30XXX", pos); + TemporalAccessor result = (TemporalAccessor) format.parseObject("ONE30XXX", pos); assertEquals(pos.getIndex(), 5); assertEquals(pos.getErrorIndex(), -1); - assertEquals(result.getFieldValueMap().size(), 1); - assertEquals(result.getFieldValue(DAY_OF_MONTH), 30L); + assertEquals(result.isSupported(DAY_OF_MONTH), true); + assertEquals(result.getLong(DAY_OF_MONTH), 30L); } @Test