test/java/time/tck/java/time/format/TCKDateTimeFormatter.java
Print this page
*** 59,74 ****
*/
package tck.java.time.format;
import static java.time.temporal.ChronoField.DAY_OF_MONTH;
import static java.time.temporal.ChronoField.HOUR_OF_DAY;
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 java.io.IOException;
import java.text.Format;
import java.text.ParseException;
import java.text.ParsePosition;
import java.util.Locale;
--- 59,75 ----
*/
package tck.java.time.format;
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.text.Format;
import java.text.ParseException;
import java.text.ParsePosition;
import java.util.Locale;
*** 78,109 ****
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
! import java.time.calendar.ThaiBuddhistChrono;
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.temporal.Temporal;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalQuery;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
- import test.java.time.format.MockIOExceptionAppendable;
/**
* Test DateTimeFormatter.
*/
@Test(groups={"tck"})
--- 79,105 ----
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
! import java.time.chrono.ThaiBuddhistChronology;
import java.time.format.DateTimeFormatSymbols;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.DateTimeParseException;
import java.time.format.SignStyle;
! 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;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
* Test DateTimeFormatter.
*/
@Test(groups={"tck"})
*** 111,122 ****
private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
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 DateTimeFormatter fmt;
@BeforeMethod
public void setUp() {
--- 107,118 ----
private static final ZoneOffset OFFSET_PONE = ZoneOffset.ofHours(1);
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 = DateTimeFormatter.ofPattern("'ONE'd");
! private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("'ONE'yyyy MM dd");
private DateTimeFormatter fmt;
@BeforeMethod
public void setUp() {
*** 139,155 ****
base.withLocale((Locale) null);
}
//-----------------------------------------------------------------------
@Test
! public void test_withChrono() {
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);
}
//-----------------------------------------------------------------------
@Test
public void test_withZone() {
--- 135,151 ----
base.withLocale((Locale) null);
}
//-----------------------------------------------------------------------
@Test
! public void test_withChronology() {
DateTimeFormatter test = fmt;
! assertEquals(test.getChronology(), null);
! test = test.withChronology(IsoChronology.INSTANCE);
! assertEquals(test.getChronology(), IsoChronology.INSTANCE);
! test = test.withChronology(null);
! assertEquals(test.getChronology(), null);
}
//-----------------------------------------------------------------------
@Test
public void test_withZone() {
*** 165,300 ****
//-----------------------------------------------------------------------
// print
//-----------------------------------------------------------------------
@DataProvider(name="print")
! Object[][] data_print() {
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);
Instant instant = Instant.ofEpochSecond(3600);
return new Object[][] {
{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"},
{null, null, instant, "::"},
{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"},
{null, ZONE_PARIS, instant, "1970:02:+01:00Europe/Paris"},
{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"},
};
}
@Test(dataProvider="print")
! public void test_print_Temporal(Chrono<?> 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);
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));
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(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
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);
assertEquals(buf.toString(), "ONE30");
}
@Test(expectedExceptions=DateTimeException.class)
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(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(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(expectedExceptions=IOException.class) // IOException
! public void test_print_TemporalAppendable_ioError() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
try {
! test.printTo(LocalDate.of(2008, 6, 30), new MockIOExceptionAppendable());
! } catch (DateTimePrintException ex) {
! assertEquals(ex.getCause() instanceof IOException, true);
! ex.rethrowIOException();
}
}
//-----------------------------------------------------------------------
// parse(Query)
//-----------------------------------------------------------------------
--- 161,374 ----
//-----------------------------------------------------------------------
// print
//-----------------------------------------------------------------------
@DataProvider(name="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);
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);
Instant instant = Instant.ofEpochSecond(3600);
return new Object[][] {
{null, null, ld, "2008::"},
{null, null, lt, ":11:"},
{null, null, ldt, "2008:11:"},
{null, null, ot, ":11:+01:00"},
{null, null, odt, "2008:11:+01:00"},
{null, null, zdt, "2008:11:+02:00Europe/Paris"},
{null, null, instant, "::"},
{null, ZONE_PARIS, ld, "2008::"},
{null, ZONE_PARIS, lt, ":11:"},
{null, ZONE_PARIS, ldt, "2008:11:"},
{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"},
{null, ZONE_PARIS, instant, "1970:02:+01:00Europe/Paris"},
{null, OFFSET_PTHREE, ld, "2008::"},
{null, OFFSET_PTHREE, lt, ":11:"},
{null, OFFSET_PTHREE, ldt, "2008:11:"},
{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"},
! {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(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)
! .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.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.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.format((TemporalAccessor) null);
}
//-----------------------------------------------------------------------
@Test
public void test_print_TemporalAppendable() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
StringBuilder buf = new StringBuilder();
! test.formatTo(LocalDate.of(2008, 6, 30), buf);
assertEquals(buf.toString(), "ONE30");
}
@Test(expectedExceptions=DateTimeException.class)
public void test_print_TemporalAppendable_noSuchField() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
StringBuilder buf = new StringBuilder();
! 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.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.formatTo(LocalDate.of(2008, 6, 30), (Appendable) null);
}
! //-----------------------------------------------------------------------
! // 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.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)
//-----------------------------------------------------------------------
*** 361,387 ****
}
//-----------------------------------------------------------------------
@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)));
}
@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);
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]");
try {
! test.parseBest("2011-06-XX", OffsetDate::from, LocalDate::from);
} catch (DateTimeParseException ex) {
assertEquals(ex.getMessage().contains("could not be parsed"), true);
assertEquals(ex.getMessage().contains("XX"), true);
assertEquals(ex.getParsedString(), "2011-06-XX");
assertEquals(ex.getErrorIndex(), 8);
--- 435,462 ----
}
//-----------------------------------------------------------------------
@Test
public void test_parseBest_firstOption() throws Exception {
! 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 = 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 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm[XXX]");
try {
! 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);
assertEquals(ex.getParsedString(), "2011-06-XX");
assertEquals(ex.getErrorIndex(), 8);
*** 391,401 ****
@Test(expectedExceptions=DateTimeParseException.class)
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);
} catch (DateTimeParseException ex) {
assertEquals(ex.getMessage().contains("could not be parsed"), true);
assertEquals(ex.getMessage().contains("ONEXXX6789012345678901234567890123456789012345678901234567890123..."), true);
assertEquals(ex.getParsedString(), "ONEXXX67890123456789012345678901234567890123456789012345678901234567890123456789");
assertEquals(ex.getErrorIndex(), 3);
--- 466,476 ----
@Test(expectedExceptions=DateTimeParseException.class)
public void test_parseBest_String_parseErrorLongText() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
try {
! 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);
assertEquals(ex.getParsedString(), "ONEXXX67890123456789012345678901234567890123456789012345678901234567890123456789");
assertEquals(ex.getErrorIndex(), 3);
*** 405,415 ****
@Test(expectedExceptions=DateTimeParseException.class)
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);
} catch (DateTimeParseException ex) {
assertEquals(ex.getMessage().contains("could not be parsed"), true);
assertEquals(ex.getMessage().contains("ONE30SomethingElse"), true);
assertEquals(ex.getParsedString(), "ONE30SomethingElse");
assertEquals(ex.getErrorIndex(), 5);
--- 480,490 ----
@Test(expectedExceptions=DateTimeParseException.class)
public void test_parseBest_String_parseIncomplete() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
try {
! 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);
assertEquals(ex.getParsedString(), "ONE30SomethingElse");
assertEquals(ex.getErrorIndex(), 5);
*** 418,428 ****
}
@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(expectedExceptions=NullPointerException.class)
public void test_parseBest_String_nullRules() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
--- 493,503 ----
}
@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, ZonedDateTime::from, LocalDate::from);
}
@Test(expectedExceptions=NullPointerException.class)
public void test_parseBest_String_nullRules() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
*** 441,552 ****
test.parseBest("30", LocalDate::from);
}
//-----------------------------------------------------------------------
@Test
! public void test_parseToBuilder_String() throws Exception {
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);
}
@Test
! public void test_parseToBuilder_CharSequence() throws Exception {
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);
}
- //-----------------------------------------------------------------------
@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);
assertEquals(pos.getErrorIndex(), -1);
! assertEquals(result.getFieldValueMap().size(), 1);
! assertEquals(result.getFieldValueMap().get(DAY_OF_MONTH), Long.valueOf(30));
}
@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);
assertEquals(result, null);
}
@Test(expectedExceptions=NullPointerException.class)
! public void test_parseToBuilder_StringParsePosition_nullString() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
ParsePosition pos = new ParsePosition(0);
! test.parseToBuilder((String) null, pos);
}
@Test(expectedExceptions=NullPointerException.class)
! public void test_parseToBuilder_StringParsePosition_nullParsePosition() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
! test.parseToBuilder("ONE30", (ParsePosition) null);
}
@Test(expectedExceptions=IndexOutOfBoundsException.class)
! public void test_parseToBuilder_StringParsePosition_invalidPosition() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
ParsePosition pos = new ParsePosition(6);
! test.parseToBuilder("ONE30", pos);
}
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
@Test
--- 516,584 ----
test.parseBest("30", LocalDate::from);
}
//-----------------------------------------------------------------------
@Test
! public void test_parseUnresolved_StringParsePosition() {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
! 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_parseUnresolved_StringParsePosition_parseError() {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
! 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_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.getLong(MONTH_OF_YEAR), 6);
}
@Test
! 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_parseUnresolved_StringParsePosition_nullString() {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
ParsePosition pos = new ParsePosition(0);
! test.parseUnresolved((String) null, pos);
}
@Test(expectedExceptions=NullPointerException.class)
! public void test_parseUnresolved_StringParsePosition_nullParsePosition() {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
! test.parseUnresolved("ONE30", (ParsePosition) null);
}
@Test(expectedExceptions=IndexOutOfBoundsException.class)
! public void test_parseUnresolved_StringParsePosition_invalidPosition() {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
ParsePosition pos = new ParsePosition(6);
! test.parseUnresolved("ONE30", pos);
}
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
@Test
*** 574,586 ****
//-----------------------------------------------------------------------
@Test
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);
}
@Test(expectedExceptions=ParseException.class)
public void test_toFormat_parseObject_String_parseError() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
--- 606,618 ----
//-----------------------------------------------------------------------
@Test
public void test_toFormat_parseObject_String() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
Format format = test.toFormat();
! TemporalAccessor result = (TemporalAccessor) format.parseObject("ONE30");
! assertEquals(result.isSupported(DAY_OF_MONTH), true);
! assertEquals(result.getLong(DAY_OF_MONTH), 30L);
}
@Test(expectedExceptions=ParseException.class)
public void test_toFormat_parseObject_String_parseError() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
*** 619,633 ****
@Test
public void test_toFormat_parseObject_StringParsePosition() throws Exception {
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);
assertEquals(pos.getIndex(), 5);
assertEquals(pos.getErrorIndex(), -1);
! assertEquals(result.getFieldValueMap().size(), 1);
! assertEquals(result.getFieldValue(DAY_OF_MONTH), 30L);
}
@Test
public void test_toFormat_parseObject_StringParsePosition_parseError() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
--- 651,665 ----
@Test
public void test_toFormat_parseObject_StringParsePosition() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);
Format format = test.toFormat();
ParsePosition pos = new ParsePosition(0);
! TemporalAccessor result = (TemporalAccessor) format.parseObject("ONE30XXX", pos);
assertEquals(pos.getIndex(), 5);
assertEquals(pos.getErrorIndex(), -1);
! assertEquals(result.isSupported(DAY_OF_MONTH), true);
! assertEquals(result.getLong(DAY_OF_MONTH), 30L);
}
@Test
public void test_toFormat_parseObject_StringParsePosition_parseError() throws Exception {
DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withSymbols(DateTimeFormatSymbols.STANDARD);