package net.time4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import static net.time4j.PlainDate.DAY_OF_MONTH;
import static net.time4j.PlainDate.DAY_OF_QUARTER;
import static net.time4j.PlainDate.DAY_OF_WEEK;
import static net.time4j.PlainDate.DAY_OF_YEAR;
import static net.time4j.PlainDate.MONTH_AS_NUMBER;
import static net.time4j.PlainDate.MONTH_OF_YEAR;
import static net.time4j.PlainDate.QUARTER_OF_YEAR;
import static net.time4j.PlainDate.YEAR;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(JUnit4.class)
public class DateOperatorTest {
@Test
public void yearMinimized() {
assertThat(
PlainDate.of(2012, 2, 29).with(YEAR.minimized()),
is(PlainDate.of(-999999999, 2, 28)));
assertThat(
PlainTimestamp.of(2012, 2, 29, 0, 0).with(
YEAR.minimized()),
is(PlainTimestamp.of(-999999999, 2, 28, 0, 0)));
}
@Test
public void yearMaximized() {
assertThat(
PlainDate.of(2012, 2, 29).with(YEAR.maximized()),
is(PlainDate.of(999999999, 2, 28)));
assertThat(
PlainTimestamp.of(2012, 2, 29, 10, 45).with(
YEAR.maximized()),
is(PlainTimestamp.of(999999999, 2, 28, 10, 45)));
}
@Test
public void yearIncremented() {
assertThat(
PlainDate.of(2012, 2, 1).with(YEAR.incremented()),
is(PlainDate.of(2013, 2, 1)));
assertThat(
PlainDate.of(2012, 2, 29).with(YEAR.incremented()),
is(PlainDate.of(2013, 2, 28)));
assertThat(
PlainTimestamp.of(2012, 2, 1, 12, 45).with(
YEAR.incremented()),
is(PlainTimestamp.of(2013, 2, 1, 12, 45)));
}
@Test
public void yearDecremented() {
assertThat(
PlainDate.of(2012, 3, 1).with(YEAR.decremented()),
is(PlainDate.of(2011, 3, 1)));
assertThat(
PlainDate.of(2012, 2, 29).with(YEAR.decremented()),
is(PlainDate.of(2011, 2, 28)));
assertThat(
PlainTimestamp.of(2012, 3, 1, 12, 45).with(
YEAR.decremented()),
is(PlainTimestamp.of(2011, 3, 1, 12, 45)));
}
@Test
public void yearAtFloor() {
assertThat(
PlainDate.of(2012, 3, 4).with(YEAR.atFloor()),
is(PlainDate.of(2012, 1, 1)));
assertThat(
PlainTimestamp.of(2012, 3, 4, 12, 45)
.with(YEAR.atFloor()),
is(PlainTimestamp.of(2012, 1, 1, 0, 0)));
}
@Test
public void yearAtCeiling() {
assertThat(
PlainDate.of(2012, 3, 4).with(YEAR.atCeiling()),
is(PlainDate.of(2012, 12, 31)));
assertThat(
PlainTimestamp.of(2012, 3, 4, 12, 45)
.with(YEAR.atCeiling()),
is(
PlainTimestamp.of(2012, 12, 31, 23, 59, 59)
.with(PlainTime.NANO_OF_SECOND, 999999999)));
}
@Test
public void monthOfYearMinimized() {
assertThat(
PlainDate.of(2012, 2, 29).with(MONTH_OF_YEAR.minimized()),
is(PlainDate.of(2012, 1, 29)));
}
@Test
public void monthOfYearMaximized() {
assertThat(
PlainDate.of(2012, 2, 29).with(MONTH_OF_YEAR.maximized()),
is(PlainDate.of(2012, 12, 29)));
}
@Test
public void monthOfYearIncremented() {
assertThat(
PlainDate.of(2012, 2, 1).with(MONTH_OF_YEAR.incremented()),
is(PlainDate.of(2012, 3, 1)));
assertThat(
PlainDate.of(2013, 2, 1).with(MONTH_OF_YEAR.incremented()),
is(PlainDate.of(2013, 3, 1)));
assertThat(
PlainDate.of(2013, 3, 31).with(MONTH_OF_YEAR.incremented()),
is(PlainDate.of(2013, 4, 30)));
}
@Test
public void monthOfYearDecremented() {
assertThat(
PlainDate.of(2012, 3, 1).with(MONTH_OF_YEAR.decremented()),
is(PlainDate.of(2012, 2, 1)));
assertThat(
PlainDate.of(2013, 3, 1).with(MONTH_OF_YEAR.decremented()),
is(PlainDate.of(2013, 2, 1)));
assertThat(
PlainDate.of(2013, 3, 31).with(MONTH_OF_YEAR.decremented()),
is(PlainDate.of(2013, 2, 28)));
}
@Test
public void monthOfYearAtFloor() {
assertThat(
PlainDate.of(2012, 3, 4).with(MONTH_OF_YEAR.atFloor()),
is(PlainDate.of(2012, 3, 1)));
assertThat(
PlainTimestamp.of(2012, 3, 4, 12, 45)
.with(MONTH_OF_YEAR.atFloor()),
is(PlainTimestamp.of(2012, 3, 1, 0, 0)));
}
@Test
public void monthOfYearAtCeiling() {
assertThat(
PlainDate.of(2012, 3, 4).with(MONTH_OF_YEAR.atCeiling()),
is(PlainDate.of(2012, 3, 31)));
assertThat(
PlainTimestamp.of(2012, 3, 4, 12, 45)
.with(MONTH_OF_YEAR.atCeiling()),
is(
PlainTimestamp.of(2012, 3, 31, 23, 59, 59)
.with(PlainTime.NANO_OF_SECOND, 999999999)));
}
@Test
public void monthAsNumberMinimized() {
assertThat(
PlainDate.of(2012, 2, 29).with(MONTH_AS_NUMBER.minimized()),
is(PlainDate.of(2012, 1, 29)));
}
@Test
public void monthAsNumberMaximized() {
assertThat(
PlainDate.of(2012, 2, 29).with(MONTH_AS_NUMBER.maximized()),
is(PlainDate.of(2012, 12, 29)));
}
@Test
public void monthAsNumberIncremented() {
assertThat(
PlainDate.of(2012, 2, 1).with(MONTH_AS_NUMBER.incremented()),
is(PlainDate.of(2012, 3, 1)));
assertThat(
PlainDate.of(2013, 2, 1).with(MONTH_AS_NUMBER.incremented()),
is(PlainDate.of(2013, 3, 1)));
assertThat(
PlainDate.of(2013, 3, 31).with(MONTH_AS_NUMBER.incremented()),
is(PlainDate.of(2013, 4, 30)));
}
@Test
public void monthAsNumberDecremented() {
assertThat(
PlainDate.of(2012, 3, 1).with(MONTH_AS_NUMBER.decremented()),
is(PlainDate.of(2012, 2, 1)));
assertThat(
PlainDate.of(2013, 3, 1).with(MONTH_AS_NUMBER.decremented()),
is(PlainDate.of(2013, 2, 1)));
assertThat(
PlainDate.of(2013, 3, 31).with(MONTH_AS_NUMBER.decremented()),
is(PlainDate.of(2013, 2, 28)));
}
@Test
public void monthAsNumberAtFloor() {
assertThat(
PlainDate.of(2012, 3, 4).with(MONTH_AS_NUMBER.atFloor()),
is(PlainDate.of(2012, 3, 1)));
assertThat(
PlainTimestamp.of(2012, 3, 4, 12, 45)
.with(MONTH_AS_NUMBER.atFloor()),
is(PlainTimestamp.of(2012, 3, 1, 0, 0)));
}
@Test
public void monthAsNumberAtCeiling() {
assertThat(
PlainDate.of(2012, 3, 4).with(MONTH_AS_NUMBER.atCeiling()),
is(PlainDate.of(2012, 3, 31)));
assertThat(
PlainTimestamp.of(2012, 3, 4, 12, 45)
.with(MONTH_AS_NUMBER.atCeiling()),
is(
PlainTimestamp.of(2012, 3, 31, 23, 59, 59)
.with(PlainTime.NANO_OF_SECOND, 999999999)));
}
@Test
public void quarterOfYearMinimized() {
assertThat(
PlainDate.of(2012, 5, 31).with(QUARTER_OF_YEAR.minimized()),
is(PlainDate.of(2012, 2, 29)));
}
@Test
public void quarterOfYearMaximized() {
assertThat(
PlainDate.of(2012, 5, 31).with(QUARTER_OF_YEAR.maximized()),
is(PlainDate.of(2012, 11, 30)));
}
@Test
public void quarterOfYearIncremented() {
assertThat(
PlainDate.of(2012, 2, 1).with(QUARTER_OF_YEAR.incremented()),
is(PlainDate.of(2012, 5, 1)));
assertThat(
PlainDate.of(2013, 8, 31).with(QUARTER_OF_YEAR.incremented()),
is(PlainDate.of(2013, 11, 30)));
}
@Test
public void quarterOfYearDecremented() {
assertThat(
PlainDate.of(2012, 3, 1).with(QUARTER_OF_YEAR.decremented()),
is(PlainDate.of(2011, 12, 1)));
assertThat(
PlainDate.of(2013, 12, 31).with(QUARTER_OF_YEAR.decremented()),
is(PlainDate.of(2013, 9, 30)));
}
@Test
public void quarterOfYearAtFloor() {
assertThat(
PlainDate.of(2012, 3, 4).with(QUARTER_OF_YEAR.atFloor()),
is(PlainDate.of(2012, 1, 1)));
assertThat(
PlainTimestamp.of(2012, 3, 4, 12, 45)
.with(QUARTER_OF_YEAR.atFloor()),
is(PlainTimestamp.of(2012, 1, 1, 0, 0)));
}
@Test
public void quarterOfYearAtCeiling() {
assertThat(
PlainDate.of(2012, 2, 4).with(QUARTER_OF_YEAR.atCeiling()),
is(PlainDate.of(2012, 3, 31)));
assertThat(
PlainTimestamp.of(2012, 2, 4, 12, 45)
.with(QUARTER_OF_YEAR.atCeiling()),
is(
PlainTimestamp.of(2012, 3, 31, 23, 59, 59)
.with(PlainTime.NANO_OF_SECOND, 999999999)));
}
@Test
public void dayOfWeekMinimized() {
assertThat(
PlainDate.of(2014, 4, 30).with(DAY_OF_WEEK.minimized()),
is(PlainDate.of(2014, 4, 28)));
}
@Test
public void dayOfWeekMaximized() {
assertThat(
PlainDate.of(2014, 4, 30).with(DAY_OF_WEEK.maximized()),
is(PlainDate.of(2014, 5, 4)));
}
@Test
public void dayOfWeekIncremented() {
assertThat(
PlainDate.of(2012, 2, 1).with(DAY_OF_WEEK.incremented()),
is(PlainDate.of(2012, 2, 2)));
assertThat(
PlainDate.of(2014, 4, 20).with(DAY_OF_WEEK.incremented()),
is(PlainDate.of(2014, 4, 21)));
}
@Test
public void dayOfWeekDecremented() {
assertThat(
PlainDate.of(2012, 3, 1).with(DAY_OF_WEEK.decremented()),
is(PlainDate.of(2012, 2, 29)));
assertThat(
PlainDate.of(2014, 4, 21).with(DAY_OF_WEEK.decremented()),
is(PlainDate.of(2014, 4, 20)));
}
@Test
public void dayOfWeekAtFloor() {
assertThat(
PlainDate.of(2012, 4, 4).with(DAY_OF_WEEK.atFloor()),
is(PlainDate.of(2012, 4, 4)));
assertThat(
PlainTimestamp.of(2012, 4, 4, 12, 45)
.with(DAY_OF_WEEK.atFloor()),
is(PlainTimestamp.of(2012, 4, 4, 0, 0)));
}
@Test
public void dayOfWeekAtCeiling() {
assertThat(
PlainDate.of(2012, 2, 4).with(DAY_OF_WEEK.atCeiling()),
is(PlainDate.of(2012, 2, 4)));
assertThat(
PlainTimestamp.of(2012, 2, 4, 12, 45)
.with(DAY_OF_WEEK.atCeiling()),
is(
PlainTimestamp.of(2012, 2, 4, 23, 59, 59)
.with(PlainTime.NANO_OF_SECOND, 999999999)));
}
@Test
public void dayOfQuarterMinimized() {
assertThat(
PlainDate.of(2014, 5, 30).with(DAY_OF_QUARTER.minimized()),
is(PlainDate.of(2014, 4, 1)));
}
@Test
public void dayOfQuarterMaximized() {
assertThat(
PlainDate.of(2014, 4, 2).with(DAY_OF_QUARTER.maximized()),
is(PlainDate.of(2014, 6, 30)));
}
@Test
public void dayOfQuarterIncremented() {
assertThat(
PlainDate.of(2012, 2, 1).with(DAY_OF_QUARTER.incremented()),
is(PlainDate.of(2012, 2, 2)));
assertThat(
PlainDate.of(2014, 6, 30).with(DAY_OF_QUARTER.incremented()),
is(PlainDate.of(2014, 7, 1)));
}
@Test
public void dayOfQuarterDecremented() {
assertThat(
PlainDate.of(2012, 3, 1).with(DAY_OF_QUARTER.decremented()),
is(PlainDate.of(2012, 2, 29)));
assertThat(
PlainDate.of(2014, 7, 1).with(DAY_OF_QUARTER.decremented()),
is(PlainDate.of(2014, 6, 30)));
}
@Test
public void dayOfQuarterAtFloor() {
assertThat(
PlainDate.of(2012, 4, 4).with(DAY_OF_QUARTER.atFloor()),
is(PlainDate.of(2012, 4, 4)));
assertThat(
PlainTimestamp.of(2012, 4, 4, 12, 45)
.with(DAY_OF_QUARTER.atFloor()),
is(PlainTimestamp.of(2012, 4, 4, 0, 0)));
}
@Test
public void dayOfQuarterAtCeiling() {
assertThat(
PlainDate.of(2012, 2, 4).with(DAY_OF_QUARTER.atCeiling()),
is(PlainDate.of(2012, 2, 4)));
assertThat(
PlainTimestamp.of(2012, 2, 4, 12, 45)
.with(DAY_OF_QUARTER.atCeiling()),
is(
PlainTimestamp.of(2012, 2, 4, 23, 59, 59)
.with(PlainTime.NANO_OF_SECOND, 999999999)));
}
@Test
public void dayOfYearMinimized() {
assertThat(
PlainDate.of(2014, 5, 30).with(DAY_OF_YEAR.minimized()),
is(PlainDate.of(2014, 1, 1)));
}
@Test
public void dayOfYearMaximized() {
assertThat(
PlainDate.of(2014, 4, 2).with(DAY_OF_YEAR.maximized()),
is(PlainDate.of(2014, 12, 31)));
}
@Test
public void dayOfYearIncremented() {
assertThat(
PlainDate.of(2012, 2, 1).with(DAY_OF_YEAR.incremented()),
is(PlainDate.of(2012, 2, 2)));
assertThat(
PlainDate.of(2014, 12, 31).with(DAY_OF_YEAR.incremented()),
is(PlainDate.of(2015, 1, 1)));
}
@Test
public void dayOfYearDecremented() {
assertThat(
PlainDate.of(2012, 3, 1).with(DAY_OF_YEAR.decremented()),
is(PlainDate.of(2012, 2, 29)));
assertThat(
PlainDate.of(2015, 1, 1).with(DAY_OF_YEAR.decremented()),
is(PlainDate.of(2014, 12, 31)));
}
@Test
public void dayOfYearAtFloor() {
assertThat(
PlainDate.of(2012, 4, 4).with(DAY_OF_YEAR.atFloor()),
is(PlainDate.of(2012, 4, 4)));
assertThat(
PlainTimestamp.of(2012, 4, 4, 12, 45)
.with(DAY_OF_YEAR.atFloor()),
is(PlainTimestamp.of(2012, 4, 4, 0, 0)));
}
@Test
public void dayOfYearAtCeiling() {
assertThat(
PlainDate.of(2012, 2, 4).with(DAY_OF_YEAR.atCeiling()),
is(PlainDate.of(2012, 2, 4)));
assertThat(
PlainTimestamp.of(2012, 2, 4, 12, 45)
.with(DAY_OF_YEAR.atCeiling()),
is(
PlainTimestamp.of(2012, 2, 4, 23, 59, 59)
.with(PlainTime.NANO_OF_SECOND, 999999999)));
}
@Test
public void dayOfMonthMinimized() {
assertThat(
PlainDate.of(2014, 5, 30).with(DAY_OF_MONTH.minimized()),
is(PlainDate.of(2014, 5, 1)));
}
@Test
public void dayOfMonthMaximized() {
assertThat(
PlainDate.of(2012, 2, 2).with(DAY_OF_MONTH.maximized()),
is(PlainDate.of(2012, 2, 29)));
assertThat(
PlainDate.of(2014, 2, 2).with(DAY_OF_MONTH.maximized()),
is(PlainDate.of(2014, 2, 28)));
}
@Test
public void dayOfMonthIncremented() {
assertThat(
PlainDate.of(2012, 2, 1).with(DAY_OF_MONTH.incremented()),
is(PlainDate.of(2012, 2, 2)));
assertThat(
PlainDate.of(2012, 2, 29).with(DAY_OF_MONTH.incremented()),
is(PlainDate.of(2012, 3, 1)));
assertThat(
PlainDate.of(2014, 12, 31).with(DAY_OF_MONTH.incremented()),
is(PlainDate.of(2015, 1, 1)));
}
@Test
public void dayOfMonthDecremented() {
assertThat(
PlainDate.of(2012, 3, 1).with(DAY_OF_MONTH.decremented()),
is(PlainDate.of(2012, 2, 29)));
assertThat(
PlainDate.of(2013, 3, 1).with(DAY_OF_MONTH.decremented()),
is(PlainDate.of(2013, 2, 28)));
assertThat(
PlainDate.of(2015, 1, 1).with(DAY_OF_MONTH.decremented()),
is(PlainDate.of(2014, 12, 31)));
}
@Test
public void dayOfMonthAtFloor() {
assertThat(
PlainDate.of(2012, 4, 4).with(DAY_OF_MONTH.atFloor()),
is(PlainDate.of(2012, 4, 4)));
assertThat(
PlainTimestamp.of(2012, 4, 4, 12, 45)
.with(DAY_OF_MONTH.atFloor()),
is(PlainTimestamp.of(2012, 4, 4, 0, 0)));
}
@Test
public void dayOfMonthAtCeiling() {
assertThat(
PlainDate.of(2012, 2, 4).with(DAY_OF_MONTH.atCeiling()),
is(PlainDate.of(2012, 2, 4)));
assertThat(
PlainTimestamp.of(2012, 2, 4, 12, 45)
.with(DAY_OF_MONTH.atCeiling()),
is(
PlainTimestamp.of(2012, 2, 4, 23, 59, 59)
.with(PlainTime.NANO_OF_SECOND, 999999999)));
}
@Test
public void genericOrdinalWeekdayInMonth() {
assertThat(
PlainDate.of(2015, 6, 11).with(PlainDate.WEEKDAY_IN_MONTH.setTo(0, Weekday.MONDAY)),
is(PlainDate.of(2015, 5, 25)));
assertThat(
PlainDate.of(2015, 6, 11).with(PlainDate.WEEKDAY_IN_MONTH.setTo(Integer.MAX_VALUE, Weekday.MONDAY)),
is(PlainDate.of(2015, 6, 29)));
}
}