package net.time4j.range;
import net.time4j.PlainDate;
import net.time4j.SystemClock;
import net.time4j.Weekday;
import net.time4j.ZonalClock;
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.util.Locale;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@RunWith(JUnit4.class)
public class CalendarWeekTest {
@Test
public void getYear() {
assertThat(CalendarWeek.of(2011, 4).getYear(), is(2011));
}
@Test
public void getWeek() {
assertThat(CalendarWeek.of(2011, 4).getWeek(), is(4));
}
@Test
public void getStart() {
assertThat(CalendarWeek.of(2011, 4).getStart(), is(Boundary.ofClosed(PlainDate.of(2011, 1, 24))));
}
@Test
public void getEnd() {
assertThat(CalendarWeek.of(2011, 4).getEnd(), is(Boundary.ofClosed(PlainDate.of(2011, 1, 30))));
}
@Test
public void compareTo() {
assertThat(CalendarWeek.of(2012, 3).compareTo(CalendarWeek.of(2012, 4)) < 0, is(true));
assertThat(CalendarWeek.of(2012, 3).compareTo(CalendarWeek.of(2012, 2)) > 0, is(true));
assertThat(CalendarWeek.of(2012, 3).compareTo(CalendarWeek.of(2012, 3)) == 0, is(true));
}
@Test
public void atDayOfWeek() {
CalendarWeek cw = CalendarWeek.of(2012, 3);
assertThat(
cw.at(Weekday.MONDAY) == cw.getStart().getTemporal(),
is(true));
assertThat(
cw.at(Weekday.FRIDAY),
is(PlainDate.of(2012, 1, 20)));
}
@Test
public void currentValue() {
ZonalClock clock = SystemClock.inLocalView();
CalendarWeek cw = clock.now(CalendarWeek.chronology());
assertThat(cw.getYear(), is(clock.today().getYear()));
assertThat(cw.getWeek(), is(clock.today().get(CalendarWeek.WEEK_OF_YEAR)));
}
@Test
public void iterator() {
int count = 1;
for (PlainDate date : CalendarWeek.of(2016, 4)) {
System.out.println(count + " => " + date);
count++;
}
assertThat(count - 1, is(7));
}
@Test
public void length() {
assertThat(CalendarWeek.of(2016, 3).length(), is(7));
}
@Test
public void contains() {
assertThat(CalendarWeek.of(2016, 1).contains(CalendarWeek.YEAR_OF_WEEKDATE), is(true));
assertThat(CalendarWeek.of(2016, 1).contains(CalendarWeek.WEEK_OF_YEAR), is(true));
assertThat(CalendarWeek.of(2016, 24).contains(PlainDate.of(2016, 6, 12)), is(false));
assertThat(CalendarWeek.of(2016, 24).contains(PlainDate.of(2016, 6, 13)), is(true));
assertThat(CalendarWeek.of(2016, 24).contains(PlainDate.of(2016, 6, 14)), is(true));
assertThat(CalendarWeek.of(2016, 24).contains(PlainDate.of(2016, 6, 19)), is(true));
assertThat(CalendarWeek.of(2016, 24).contains(PlainDate.of(2016, 6, 20)), is(false));
}
@Test
public void isAfter() {
assertThat(CalendarWeek.of(2016, 24).isAfter(PlainDate.of(2016, 6, 13)), is(false));
assertThat(CalendarWeek.of(2016, 24).isAfter(PlainDate.of(2016, 6, 12)), is(true));
assertThat(CalendarWeek.of(2016, 24).isAfter(CalendarWeek.of(2016, 23)), is(true));
assertThat(CalendarWeek.of(2016, 24).isAfter(CalendarWeek.of(2016, 24)), is(false));
}
@Test
public void isBefore() {
assertThat(CalendarWeek.of(2016, 24).isBefore(PlainDate.of(2016, 6, 20)), is(true));
assertThat(CalendarWeek.of(2016, 24).isBefore(PlainDate.of(2016, 6, 19)), is(false));
assertThat(CalendarWeek.of(2016, 24).isBefore(CalendarWeek.of(2016, 25)), is(true));
assertThat(CalendarWeek.of(2016, 24).isBefore(CalendarWeek.of(2016, 24)), is(false));
}
@Test
public void isSimultaneous() {
assertThat(CalendarWeek.of(2016, 24).isSimultaneous(CalendarWeek.of(2016, 25)), is(false));
assertThat(CalendarWeek.of(2016, 24).isSimultaneous(CalendarWeek.of(2016, 24)), is(true));
}
@Test
public void plusYears() {
assertThat(
CalendarWeek.of(2012, 24).plus(Years.ofWeekBased(4)),
is(CalendarWeek.of(2016, 24)));
assertThat(
CalendarWeek.of(2015, 53).plus(Years.ofWeekBased(1)),
is(CalendarWeek.of(2016, 52)));
}
@Test
public void minusYears() {
assertThat(
CalendarWeek.of(2012, 24).minus(Years.ofWeekBased(4)),
is(CalendarWeek.of(2008, 24)));
assertThat(
CalendarWeek.of(2015, 53).minus(Years.ofWeekBased(1)),
is(CalendarWeek.of(2014, 52)));
}
@Test
public void plusWeeks() {
assertThat(
CalendarWeek.of(2012, 24).plus(Weeks.of(7)),
is(CalendarWeek.of(2012, 31)));
}
@Test
public void minusWeeks() {
assertThat(
CalendarWeek.of(2016, 1).minus(Weeks.of(7)),
is(CalendarWeek.of(2015, 47)));
}
@Test
public void formatISO() {
CalendarWeek cw = CalendarWeek.of(2012, 3);
assertThat(
cw.toString(),
is("2012-W03"));
}
@Test
public void parseISO() throws ParseException {
CalendarWeek expected = CalendarWeek.of(2012, 3);
assertThat(
CalendarWeek.parseISO("2012-W03"),
is(expected));
assertThat(
CalendarWeek.parseISO("2012W03"),
is(expected));
}
@Test
public void formatKW() {
ChronoFormatter<CalendarWeek> f =
ChronoFormatter.setUp(CalendarWeek.chronology(), Locale.ROOT)
.addPattern("w. 'KW'", PatternType.CLDR).build();
assertThat(
f.format(CalendarWeek.of(2016, 4)),
is("4. KW"));
}
@Test
public void withLastWeekOfYear() {
assertThat(
CalendarWeek.of(2015, 1).withLastWeekOfYear(),
is(CalendarWeek.of(2015, 53)));
}
@Test
public void nowInSystemTime() {
assertThat(
CalendarWeek.nowInSystemTime(),
is(SystemClock.inLocalView().now(CalendarWeek.chronology())));
}
}