package net.time4j.format.expert; import net.time4j.PlainDate; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import java.text.ParseException; import java.util.Locale; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(JUnit4.class) public class SkipUnknownTest { @Test public void print() { ChronoFormatter<PlainDate> fmt = ChronoFormatter.setUp(PlainDate.class, Locale.US) .addText(PlainDate.DAY_OF_WEEK) .skipUnknown(10) .addPattern("[, ]dd.MM.uuuu", PatternType.CLDR) .build(); assertThat( fmt.format(PlainDate.of(2014, 10, 4)), is("Saturday, 04.10.2014")); } @Test(expected=IllegalArgumentException.class) public void invalidKeepRemainingChars() throws ParseException { ChronoFormatter.setUp(PlainDate.class, Locale.US) .addText(PlainDate.DAY_OF_WEEK) .skipUnknown(-1) .addPattern("[, ]dd.MM.uuuu", PatternType.CLDR) .build(); } @Test(expected=IllegalArgumentException.class) public void invalidMaxIterations() throws ParseException { ChronoFormatter.setUp(PlainDate.class, Locale.US) .addText(PlainDate.DAY_OF_WEEK) .skipUnknown(c -> true, 0) .addPattern("[, ]dd.MM.uuuu", PatternType.CLDR) .build(); } @Test(expected=NullPointerException.class) public void missingCondition() throws ParseException { ChronoFormatter.setUp(PlainDate.class, Locale.US) .addText(PlainDate.DAY_OF_WEEK) .skipUnknown(null, 1) .addPattern("[, ]dd.MM.uuuu", PatternType.CLDR) .build(); } @Test public void parseKeepRemainingChars() throws ParseException { ChronoFormatter<PlainDate> fmt = ChronoFormatter.setUp(PlainDate.class, Locale.US) .addText(PlainDate.DAY_OF_WEEK) .skipUnknown(10) .addPattern("[, ]dd.MM.uuuu", PatternType.CLDR) .build(); assertThat( fmt.parse("Saturday,\txyz\n04.10.2014"), is(PlainDate.of(2014, 10, 4))); } @Test(expected=ParseException.class) public void parseWithTrailingCharsKept() throws ParseException { ChronoFormatter<PlainDate> fmt = ChronoFormatter.setUp(PlainDate.class, Locale.US) .addText(PlainDate.DAY_OF_WEEK) .addPattern("[, ]dd.MM.uuuu", PatternType.CLDR) .skipUnknown(3) .build(); try { fmt.parse("Saturday, 04.10.2014\txyz\n"); } catch (ParseException pe) { assertThat(pe.getErrorOffset(), is(22)); throw pe; } } @Test public void parseWithTrailingCharsRemoved() throws ParseException { ChronoFormatter<PlainDate> fmt = ChronoFormatter.setUp(PlainDate.class, Locale.US) .addText(PlainDate.DAY_OF_WEEK) .addPattern("[, ]dd.MM.uuuu", PatternType.CLDR) .skipUnknown(0) // same effect as with format attribute TRAILING_CHARACTERS .build(); assertThat( fmt.parse("Saturday, 04.10.2014\txyz\n"), is(PlainDate.of(2014, 10, 4))); } @Test public void parseWithNonDigitCondition() throws ParseException { ChronoFormatter<PlainDate> fmt = ChronoFormatter.setUp(PlainDate.class, Locale.US) .addText(PlainDate.DAY_OF_WEEK) .skipUnknown( c -> ((c < '0') || (c > '9')), Integer.MAX_VALUE ) .addFixedInteger(PlainDate.DAY_OF_MONTH, 2) .addLiteral('.') .addFixedInteger(PlainDate.MONTH_AS_NUMBER, 2) .addLiteral('.') .addFixedInteger(PlainDate.YEAR, 4) .build(); assertThat( fmt.parse("Saturday,\txyz\n04.10.2014"), is(PlainDate.of(2014, 10, 4))); } }