@Test(dataProvider="preferredZones") public void test_ParseText(String expected, String text, Set<ZoneId> preferred, Locale locale, TextStyle style) { DateTimeFormatter fmt = new DateTimeFormatterBuilder().appendZoneText(style, preferred) .toFormatter(locale) .withDecimalStyle(DecimalStyle.of(locale)); String ret = fmt.parse(text, TemporalQueries.zone()).getId(); System.out.printf("[%-5s %s] %24s -> %s(%s)%n", locale.toString(), style == TextStyle.FULL ? " full" :"short", text, ret, expected); assertEquals(ret, expected); }
@Test public void test_of_Locale() { DecimalStyle loc1 = DecimalStyle.of(Locale.CANADA); assertEquals(loc1.getZeroDigit(), '0'); assertEquals(loc1.getPositiveSign(), '+'); assertEquals(loc1.getNegativeSign(), '-'); assertEquals(loc1.getDecimalSeparator(), '.'); }
@Test public void test_toFormat_parseObject_StringParsePosition_invalidPosition_tooSmall() throws Exception { // SimpleDateFormat throws StringIndexOutOfBoundException DateTimeFormatter dtf = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.STANDARD); ParsePosition pos = new ParsePosition(-1); Format test = dtf.toFormat(); assertNull(test.parseObject("ONE30", pos)); assertTrue(pos.getErrorIndex() >= 0); }
@Test(expectedExceptions=NullPointerException.class) public void test_toFormat_parseObject_StringParsePosition_nullParsePosition() throws Exception { // SimpleDateFormat has this behavior DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.STANDARD); Format format = test.toFormat(); format.parseObject("ONE30", (ParsePosition) null); }
@Test public void test_equalsHashCode3() { DecimalStyle a = DecimalStyle.STANDARD.withZeroDigit('A'); DecimalStyle b = DecimalStyle.STANDARD.withDecimalSeparator('A'); assertEquals(a.equals(b), false); assertEquals(b.equals(a), false); }
@Test(expectedExceptions=ParseException.class) public void test_toFormat_parseObject_String_parseError() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.STANDARD); Format format = test.toFormat(); try { format.parseObject("ONEXXX"); } catch (ParseException ex) { assertEquals(ex.getMessage().contains("ONEXXX"), true); assertEquals(ex.getErrorOffset(), 3); throw ex; } }
@Test public void test_print_TemporalAppendable() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.STANDARD); StringBuilder buf = new StringBuilder(); test.formatTo(LocalDate.of(2008, 6, 30), buf); assertEquals(buf.toString(), "ONE30"); }
@Test public void test_parse_CharSequence() { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.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_ParsePosition() { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.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(expectedExceptions=ParseException.class) public void test_toFormat_parseObject_String_parseErrorLongText() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.STANDARD); Format format = test.toFormat(); try { format.parseObject("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_parseBest_String_parseIncomplete() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.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); throw ex; } }
@Test(dataProvider="format_data") public void test_parseLocalizedText(Chronology chrono, Locale formatLocale, Locale numberingLocale, ChronoLocalDate expected, String text) { DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL) .withChronology(chrono).withLocale(formatLocale) .withDecimalStyle(DecimalStyle.of(numberingLocale)); TemporalAccessor temporal = dtf.parse(text); ChronoLocalDate date = chrono.date(temporal); assertEquals(date, expected); }
@Test public void test_parseUnresolved_StringParsePosition() { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.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).withDecimalStyle(DecimalStyle.STANDARD); ParsePosition pos = new ParsePosition(0); TemporalAccessor result = test.parseUnresolved("ONEXXX", pos); assertEquals(pos.getIndex(), 0); assertEquals(pos.getErrorIndex(), 3); assertEquals(result, null); }
@Test(dataProvider="format_data") public void test_formatLocalizedDate(Chronology chrono, Locale formatLocale, Locale numberingLocale, ChronoLocalDate date, String expected) { DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL) .withChronology(chrono).withLocale(formatLocale) .withDecimalStyle(DecimalStyle.of(numberingLocale)); String text = dtf.format(date); assertEquals(text, expected); }
@Test public void test_toFormat_format() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.STANDARD); Format format = test.toFormat(); String result = format.format(LocalDate.of(2008, 6, 30)); assertEquals(result, "ONE30"); }
@Test public void test_toFormat_parseObject_String() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.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 public void test_toFormat_parseObject_StringParsePosition_parseError() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.STANDARD); Format format = test.toFormat(); ParsePosition pos = new ParsePosition(0); TemporalAccessor result = (TemporalAccessor) format.parseObject("ONEXXX", pos); assertEquals(pos.getIndex(), 0); // TODO: is this right? assertEquals(pos.getErrorIndex(), 3); assertEquals(result, null); }
@Test(expectedExceptions=NullPointerException.class) public void test_toFormat_parseObject_StringParsePosition_nullString() throws Exception { // SimpleDateFormat has this behavior DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.STANDARD); Format format = test.toFormat(); ParsePosition pos = new ParsePosition(0); format.parseObject((String) null, pos); }
@Test public void test_withLocale_same() throws Exception { DateTimeFormatter base = new DateTimeFormatterBuilder().appendLiteral("ONE") .appendValue(DAY_OF_MONTH, 1, 2, SignStyle.NOT_NEGATIVE) .toFormatter(Locale.ENGLISH) .withDecimalStyle(DecimalStyle.STANDARD); DateTimeFormatter test = base.withLocale(Locale.ENGLISH); assertSame(test, base); }
@BeforeMethod public void setUp() { buf = new StringBuilder(); builder = new DateTimeFormatterBuilder(); dta = ZonedDateTime.of(LocalDateTime.of(2011, 6, 30, 12, 30, 40, 0), ZoneId.of("Europe/Paris")); locale = Locale.ENGLISH; decimalStyle = DecimalStyle.STANDARD; }
private DateTimeFormatter getFormatter(Locale locale, TextStyle style, boolean ci) { DateTimeFormatterBuilder db = new DateTimeFormatterBuilder(); if (ci) { db = db.parseCaseInsensitive(); } return db.appendZoneText(style) .toFormatter(locale) .withDecimalStyle(DecimalStyle.of(locale)); }
@Test public void test_STANDARD() { DecimalStyle loc1 = DecimalStyle.STANDARD; assertEquals(loc1.getZeroDigit(), '0'); assertEquals(loc1.getPositiveSign(), '+'); assertEquals(loc1.getNegativeSign(), '-'); assertEquals(loc1.getDecimalSeparator(), '.'); }
@Test public void test_toFormat_parseObject_StringParsePosition_invalidPosition_tooBig() throws Exception { // SimpleDateFormat has this behavior DateTimeFormatter dtf = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.STANDARD); ParsePosition pos = new ParsePosition(6); Format test = dtf.toFormat(); assertNull(test.parseObject("ONE30", pos)); assertTrue(pos.getErrorIndex() >= 0); }
@Test public void test_equalsHashCode1() { DecimalStyle a = DecimalStyle.STANDARD; DecimalStyle b = DecimalStyle.STANDARD; assertEquals(a.equals(b), true); assertEquals(b.equals(a), true); assertEquals(a.hashCode(), b.hashCode()); }
@Test public void test_toFormat_parseObject_StringParsePosition() throws Exception { DateTimeFormatter test = fmt.withLocale(Locale.ENGLISH).withDecimalStyle(DecimalStyle.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); }