package net.time4j.range; import net.time4j.PlainDate; import net.time4j.Month; import net.time4j.SystemClock; import net.time4j.ZonalClock; import net.time4j.format.DisplayMode; import net.time4j.format.expert.ChronoFormatter; import net.time4j.format.expert.PatternType; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import java.text.ParseException; import java.time.YearMonth; import java.util.Locale; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @RunWith(JUnit4.class) public class CalendarMonthTest { @Test public void getYear() { assertThat(CalendarMonth.of(2011, Month.FEBRUARY).getYear(), is(2011)); } @Test public void getMonth() { assertThat(CalendarMonth.of(2011, Month.FEBRUARY).getMonth(), is(Month.FEBRUARY)); } @Test public void atEndOfMonth() { assertThat(CalendarMonth.of(2012, 2).atEndOfMonth(), is(PlainDate.of(2012, 2, 29))); } @Test public void getStart() { assertThat(CalendarMonth.of(2011, Month.FEBRUARY).getStart(), is(Boundary.ofClosed(PlainDate.of(2011, 2, 1)))); } @Test public void getEnd() { assertThat(CalendarMonth.of(2011, Month.FEBRUARY).getEnd(), is(Boundary.ofClosed(PlainDate.of(2011, 2, 28)))); } @Test public void compareTo() { assertThat( CalendarMonth.of(2012, Month.FEBRUARY).compareTo(CalendarMonth.of(2012, Month.MARCH)) < 0, is(true)); assertThat( CalendarMonth.of(2012, Month.FEBRUARY).compareTo(CalendarMonth.of(2012, Month.JANUARY)) > 0, is(true)); assertThat( CalendarMonth.of(2012, Month.FEBRUARY).compareTo(CalendarMonth.of(2012, Month.FEBRUARY)) == 0, is(true)); } @Test public void atDay() { CalendarMonth cm = CalendarMonth.of(2012, Month.FEBRUARY); assertThat( cm.atDayOfMonth(1) == cm.getStart().getTemporal(), is(true)); assertThat( cm.atDayOfMonth(29), is(PlainDate.of(2012, 2, 29))); } @Test(expected=IllegalArgumentException.class) public void atDayOutOfRange() { CalendarMonth.of(2013, Month.FEBRUARY).atDayOfMonth(29); } @Test public void currentValue() { ZonalClock clock = SystemClock.inLocalView(); CalendarMonth cm = clock.now(CalendarMonth.chronology()); assertThat(cm.getYear(), is(clock.today().getYear())); assertThat(cm.getMonth(), is(clock.today().get(PlainDate.MONTH_OF_YEAR))); } @Test public void iterator() { int count = 1; for (PlainDate date : CalendarMonth.of(2016, Month.FEBRUARY)) { System.out.println(count + " => " + date); count++; } assertThat(count - 1, is(29)); } @Test public void length() { assertThat(CalendarMonth.of(2015, Month.JANUARY).length(), is(31)); assertThat(CalendarMonth.of(2016, Month.FEBRUARY).length(), is(29)); assertThat(CalendarMonth.of(2017, Month.FEBRUARY).length(), is(28)); assertThat(CalendarMonth.of(2015, Month.MARCH).length(), is(31)); assertThat(CalendarMonth.of(2015, Month.APRIL).length(), is(30)); assertThat(CalendarMonth.of(2015, Month.MAY).length(), is(31)); assertThat(CalendarMonth.of(2015, Month.JUNE).length(), is(30)); assertThat(CalendarMonth.of(2015, Month.JULY).length(), is(31)); assertThat(CalendarMonth.of(2015, Month.AUGUST).length(), is(31)); assertThat(CalendarMonth.of(2015, Month.SEPTEMBER).length(), is(30)); assertThat(CalendarMonth.of(2015, Month.OCTOBER).length(), is(31)); assertThat(CalendarMonth.of(2015, Month.NOVEMBER).length(), is(30)); assertThat(CalendarMonth.of(2015, Month.DECEMBER).length(), is(31)); } @Test public void contains() { assertThat(CalendarMonth.of(2016, Month.FEBRUARY).contains(CalendarMonth.YEAR), is(true)); assertThat(CalendarMonth.of(2016, Month.FEBRUARY).contains(CalendarMonth.MONTH_OF_YEAR), is(true)); assertThat(CalendarMonth.of(2016, Month.FEBRUARY).contains(PlainDate.of(2015, 1, 31)), is(false)); assertThat(CalendarMonth.of(2016, Month.FEBRUARY).contains(PlainDate.of(2016, 2, 1)), is(true)); assertThat(CalendarMonth.of(2016, Month.FEBRUARY).contains(PlainDate.of(2016, 2, 29)), is(true)); assertThat(CalendarMonth.of(2016, Month.FEBRUARY).contains(PlainDate.of(2016, 3, 1)), is(false)); } @Test public void isAfter() { assertThat(CalendarMonth.of(2016, Month.FEBRUARY).isAfter(PlainDate.of(2016, 2, 1)), is(false)); assertThat(CalendarMonth.of(2016, Month.FEBRUARY).isAfter(PlainDate.of(2016, 1, 31)), is(true)); assertThat(CalendarMonth.of(2016, Month.FEBRUARY).isAfter(CalendarMonth.of(2016, Month.JANUARY)), is(true)); assertThat(CalendarMonth.of(2016, Month.FEBRUARY).isAfter(CalendarMonth.of(2016, Month.FEBRUARY)), is(false)); } @Test public void isBefore() { assertThat(CalendarMonth.of(2016, Month.FEBRUARY).isBefore(PlainDate.of(2016, 2, 29)), is(false)); assertThat(CalendarMonth.of(2016, Month.FEBRUARY).isBefore(PlainDate.of(2016, 3, 1)), is(true)); assertThat(CalendarMonth.of(2016, Month.FEBRUARY).isBefore(CalendarMonth.of(2016, Month.MARCH)), is(true)); assertThat(CalendarMonth.of(2016, Month.FEBRUARY).isBefore(CalendarMonth.of(2016, Month.FEBRUARY)), is(false)); } @Test public void isSimultaneous() { assertThat( CalendarMonth.of(2016, Month.FEBRUARY).isSimultaneous(CalendarMonth.of(2016, Month.MARCH)), is(false)); assertThat( CalendarMonth.of(2016, Month.FEBRUARY).isSimultaneous(CalendarMonth.of(2016, Month.FEBRUARY)), is(true)); } @Test public void plusYears() { assertThat( CalendarMonth.of(2012, Month.FEBRUARY).plus(Years.ofGregorian(4)), is(CalendarMonth.of(2016, Month.FEBRUARY))); } @Test public void minusYears() { assertThat( CalendarMonth.of(2012, Month.FEBRUARY).minus(Years.ofGregorian(4)), is(CalendarMonth.of(2008, Month.FEBRUARY))); } @Test public void plusMonths() { assertThat( CalendarMonth.of(2012, Month.FEBRUARY).plus(Months.of(7)), is(CalendarMonth.of(2012, Month.SEPTEMBER))); } @Test public void minusMonths() { assertThat( CalendarMonth.of(2012, Month.FEBRUARY).minus(Months.of(7)), is(CalendarMonth.of(2011, Month.JULY))); } @Test public void format() { CalendarMonth cm = CalendarMonth.of(2012, Month.FEBRUARY); assertThat( ChronoFormatter.ofPattern( "yyyyMM", PatternType.CLDR, Locale.ROOT, CalendarMonth.chronology() ).format(cm), is("201202")); } @Test public void parse1() throws ParseException { CalendarMonth expected = CalendarMonth.of(2012, Month.FEBRUARY); assertThat( ChronoFormatter.ofPattern( "yyyyMM", PatternType.CLDR, Locale.ROOT, CalendarMonth.chronology() ).parse("201202"), is(expected)); } @Test public void parse2() throws ParseException { assertThat( ChronoFormatter.ofPattern( "yyyyMM'00'", PatternType.CLDR, Locale.ROOT, CalendarMonth.chronology() ).parse("20150100"), is(CalendarMonth.of(2015, Month.JANUARY))); } @Test public void parse3() throws ParseException { assertThat( ChronoFormatter.ofPattern( "yyyyMM'00'", PatternType.CLDR, Locale.ROOT, CalendarMonth.threeten() ).parse("20150100"), is(YearMonth.of(2015, 1))); } @Test public void pattern() { assertThat( CalendarMonth.chronology().getFormatPattern(DisplayMode.LONG, Locale.JAPANESE), is("y年M月")); assertThat( CalendarMonth.chronology().getFormatPattern(DisplayMode.FULL, Locale.ROOT), is("uuuu-MM")); } @Test public void threetenAdapter() { assertThat(CalendarMonth.from(YearMonth.of(2016, 2)), is(CalendarMonth.of(2016, 2))); assertThat(CalendarMonth.of(2016, 2).toTemporalAccessor(), is(YearMonth.of(2016, 2))); } @Test public void nowInSystemTime() { assertThat( CalendarMonth.nowInSystemTime(), is(SystemClock.inLocalView().now(CalendarMonth.chronology()))); } @Test public void abuts() { assertThat( CalendarMonth.of(2016, 11).abuts(CalendarMonth.of(2016, 9)), is(false)); assertThat( CalendarMonth.of(2016, 11).abuts(CalendarMonth.of(2016, 10)), is(true)); assertThat( CalendarMonth.of(2016, 11).abuts(CalendarMonth.of(2016, 11)), is(false)); assertThat( CalendarMonth.of(2016, 11).abuts(CalendarMonth.of(2016, 12)), is(true)); assertThat( CalendarMonth.of(2016, 11).abuts(CalendarMonth.of(2017, 1)), is(false)); assertThat( CalendarMonth.of(2016, 11).abuts(DateInterval.since(PlainDate.of(2016, 11, 30))), is(false)); assertThat( CalendarMonth.of(2016, 11).abuts(DateInterval.since(PlainDate.of(2016, 12, 1))), is(true)); assertThat( CalendarMonth.of(2016, 11).abuts(DateInterval.since(PlainDate.of(2016, 12, 2))), is(false)); assertThat( CalendarMonth.of(2016, 11).abuts(DateInterval.since(PlainDate.of(2016, 12, 1)).collapse()), is(false)); } }