/* * Copyright 2011-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package kr.debop4j.timeperiod.test.tools; import kr.debop4j.timeperiod.*; import kr.debop4j.timeperiod.test.TimePeriodTestBase; import kr.debop4j.timeperiod.tools.TimeSpec; import kr.debop4j.timeperiod.tools.Times; import lombok.extern.slf4j.Slf4j; import org.joda.time.DateTime; import org.junit.Test; import static kr.debop4j.timeperiod.DayOfWeek.*; import static org.fest.assertions.Assertions.assertThat; /** * kr.debop4j.timeperiod.test.tools.TimesCalendarTest * * @author 배성혁 sunghyouk.bae@gmail.com * @since 13. 5. 21. 오후 7:00 */ @Slf4j public class TimesCalendarTest extends TimePeriodTestBase { @Test public void getYearOfTest() { assertThat(Times.getYearOf(new DateTime(2000, 1, 1, 0, 0))).isEqualTo(2000); assertThat(Times.getYearOf(new DateTime(2000, 4, 1, 0, 0))).isEqualTo(2000); assertThat(Times.getYearOf(2000, 12)).isEqualTo(2000); assertThat(Times.getYearOf(testNow)).isEqualTo(testNow.getYear()); } @Test public void nextHalfyear() { assertThat(Times.nextHalfyear(2000, Halfyear.First)).isEqualTo(new YearAndHalfyear(2000, Halfyear.Second)); assertThat(Times.nextHalfyear(2000, Halfyear.Second)).isEqualTo(new YearAndHalfyear(2001, Halfyear.First)); } @Test public void prevHalfyear() { assertThat(Times.previousHalfyear(2000, Halfyear.First)).isEqualTo(new YearAndHalfyear(1999, Halfyear.Second)); assertThat(Times.previousHalfyear(2000, Halfyear.Second)).isEqualTo(new YearAndHalfyear(2000, Halfyear.First)); } @Test public void addHalfyear() { assertThat(Times.addHalfyear(2000, Halfyear.First, 1).getHalfyear()).isEqualTo(Halfyear.Second); assertThat(Times.addHalfyear(2000, Halfyear.Second, 1).getHalfyear()).isEqualTo(Halfyear.First); assertThat(Times.addHalfyear(2000, Halfyear.First, -1).getHalfyear()).isEqualTo(Halfyear.Second); assertThat(Times.addHalfyear(2000, Halfyear.Second, -1).getHalfyear()).isEqualTo(Halfyear.First); assertThat(Times.addHalfyear(2000, Halfyear.First, 2).getHalfyear()).isEqualTo(Halfyear.First); assertThat(Times.addHalfyear(2000, Halfyear.Second, 2).getHalfyear()).isEqualTo(Halfyear.Second); assertThat(Times.addHalfyear(2000, Halfyear.First, -2).getHalfyear()).isEqualTo(Halfyear.First); assertThat(Times.addHalfyear(2000, Halfyear.Second, -2).getHalfyear()).isEqualTo(Halfyear.Second); assertThat(Times.addHalfyear(2000, Halfyear.First, 5).getHalfyear()).isEqualTo(Halfyear.Second); assertThat(Times.addHalfyear(2000, Halfyear.Second, 5).getHalfyear()).isEqualTo(Halfyear.First); assertThat(Times.addHalfyear(2000, Halfyear.First, -5).getHalfyear()).isEqualTo(Halfyear.Second); assertThat(Times.addHalfyear(2000, Halfyear.Second, -5).getHalfyear()).isEqualTo(Halfyear.First); assertThat(Times.addHalfyear(2008, Halfyear.First, 1).getYear()).isEqualTo(2008); assertThat(Times.addHalfyear(2008, Halfyear.Second, 1).getYear()).isEqualTo(2009); assertThat(Times.addHalfyear(2008, Halfyear.First, -1).getYear()).isEqualTo(2007); assertThat(Times.addHalfyear(2008, Halfyear.Second, -1).getYear()).isEqualTo(2008); assertThat(Times.addHalfyear(2008, Halfyear.First, 2).getYear()).isEqualTo(2009); assertThat(Times.addHalfyear(2008, Halfyear.Second, 2).getYear()).isEqualTo(2009); assertThat(Times.addHalfyear(2008, Halfyear.First, 3).getYear()).isEqualTo(2009); assertThat(Times.addHalfyear(2008, Halfyear.Second, 3).getYear()).isEqualTo(2010); } @Test public void getHalfyearOfMonthTest() { for (int month : TimeSpec.FirstHalfyearMonths) assertThat(Times.getHalfyearOfMonth(month)).isEqualTo(Halfyear.First); for (int month : TimeSpec.SecondHalfyearMonths) assertThat(Times.getHalfyearOfMonth(month)).isEqualTo(Halfyear.Second); } @Test public void getonthsOfHalfyear() { assertThat(Times.getMonthsOfHalfyear(Halfyear.First)).isEqualTo(TimeSpec.FirstHalfyearMonths); assertThat(Times.getMonthsOfHalfyear(Halfyear.Second)).isEqualTo(TimeSpec.SecondHalfyearMonths); } @Test public void nextQuarterTest() { assertThat(Times.nextQuarter(2000, Quarter.First).getQuarter()).isEqualTo(Quarter.Second); assertThat(Times.nextQuarter(2000, Quarter.Second).getQuarter()).isEqualTo(Quarter.Third); assertThat(Times.nextQuarter(2000, Quarter.Third).getQuarter()).isEqualTo(Quarter.Fourth); assertThat(Times.nextQuarter(2000, Quarter.Fourth).getQuarter()).isEqualTo(Quarter.First); } @Test public void previousQuarterTest() { assertThat(Times.previousQuarter(2000, Quarter.First).getQuarter()).isEqualTo(Quarter.Fourth); assertThat(Times.previousQuarter(2000, Quarter.Second).getQuarter()).isEqualTo(Quarter.First); assertThat(Times.previousQuarter(2000, Quarter.Third).getQuarter()).isEqualTo(Quarter.Second); assertThat(Times.previousQuarter(2000, Quarter.Fourth).getQuarter()).isEqualTo(Quarter.Third); } @Test public void addQuarterTest() { assertThat(Times.addQuarter(2000, Quarter.First, 1).getQuarter()).isEqualTo(Quarter.Second); assertThat(Times.addQuarter(2000, Quarter.Second, 1).getQuarter()).isEqualTo(Quarter.Third); assertThat(Times.addQuarter(2000, Quarter.Third, 1).getQuarter()).isEqualTo(Quarter.Fourth); assertThat(Times.addQuarter(2000, Quarter.Fourth, 1).getQuarter()).isEqualTo(Quarter.First); assertThat(Times.addQuarter(2000, Quarter.First, -1).getQuarter()).isEqualTo(Quarter.Fourth); assertThat(Times.addQuarter(2000, Quarter.Second, -1).getQuarter()).isEqualTo(Quarter.First); assertThat(Times.addQuarter(2000, Quarter.Third, -1).getQuarter()).isEqualTo(Quarter.Second); assertThat(Times.addQuarter(2000, Quarter.Fourth, -1).getQuarter()).isEqualTo(Quarter.Third); assertThat(Times.addQuarter(2000, Quarter.First, 2).getQuarter()).isEqualTo(Quarter.Third); assertThat(Times.addQuarter(2000, Quarter.Second, 2).getQuarter()).isEqualTo(Quarter.Fourth); assertThat(Times.addQuarter(2000, Quarter.Third, 2).getQuarter()).isEqualTo(Quarter.First); assertThat(Times.addQuarter(2000, Quarter.Fourth, 2).getQuarter()).isEqualTo(Quarter.Second); assertThat(Times.addQuarter(2000, Quarter.First, -2).getQuarter()).isEqualTo(Quarter.Third); assertThat(Times.addQuarter(2000, Quarter.Second, -2).getQuarter()).isEqualTo(Quarter.Fourth); assertThat(Times.addQuarter(2000, Quarter.Third, -2).getQuarter()).isEqualTo(Quarter.First); assertThat(Times.addQuarter(2000, Quarter.Fourth, -2).getQuarter()).isEqualTo(Quarter.Second); } @Test public void getQuarterOfMonthTest() { for (int m : TimeSpec.FirstQuarterMonths) assertThat(Times.getQuarterOfMonth(m)).isEqualTo(Quarter.First); for (int m : TimeSpec.SecondQuarterMonths) assertThat(Times.getQuarterOfMonth(m)).isEqualTo(Quarter.Second); for (int m : TimeSpec.ThirdQuarterMonths) assertThat(Times.getQuarterOfMonth(m)).isEqualTo(Quarter.Third); for (int m : TimeSpec.FourthQuarterMonths) assertThat(Times.getQuarterOfMonth(m)).isEqualTo(Quarter.Fourth); } @Test public void getMonthsOfQuarterTest() { assertThat(Times.getMonthsOfQuarter(Quarter.First)).isEqualTo(TimeSpec.FirstQuarterMonths); assertThat(Times.getMonthsOfQuarter(Quarter.Second)).isEqualTo(TimeSpec.SecondQuarterMonths); assertThat(Times.getMonthsOfQuarter(Quarter.Third)).isEqualTo(TimeSpec.ThirdQuarterMonths); assertThat(Times.getMonthsOfQuarter(Quarter.Fourth)).isEqualTo(TimeSpec.FourthQuarterMonths); } @Test public void nextMonthTest() { for (int i = 1; i <= TimeSpec.MonthsPerYear; i++) assertThat(Times.nextMonth(2000, i).getMonthOfYear()).isEqualTo(i % TimeSpec.MonthsPerYear + 1); } @Test public void prevMonthTest() { for (int i = 1; i <= TimeSpec.MonthsPerYear; i++) assertThat(Times.previousMonth(2000, i).getMonthOfYear()).isEqualTo((i - 1) <= 0 ? TimeSpec.MonthsPerYear + i - 1 : i - 1); } @Test public void addMonthTest() { for (int i = 1; i <= TimeSpec.MonthsPerYear; i++) assertThat(Times.addMonth(2000, i, 1).getMonthOfYear()).isEqualTo(i % TimeSpec.MonthsPerYear + 1); for (int i = 1; i <= TimeSpec.MonthsPerYear; i++) assertThat(Times.addMonth(2000, i, -1).getMonthOfYear()).isEqualTo((i - 1) <= 0 ? TimeSpec.MonthsPerYear + i - 1 : i - 1); final int threeYears = 3 * TimeSpec.MonthsPerYear; for (int i = 1; i <= threeYears; i++) { YearAndMonth ym = Times.addMonth(2013, 1, i); assertThat(ym.getYear()).isEqualTo(2013 + i / TimeSpec.MonthsPerYear); assertThat(ym.getMonthOfYear()).isEqualTo(i % TimeSpec.MonthsPerYear + 1); } } @Test public void weekOfYearTest() { ITimePeriod period = new TimeRange(Times.asDate(2007, 12, 31), Times.asDate(2009, 12, 31)); for (ITimePeriod p : Times.foreachDays(period)) { DateTime moment = p.getStart(); YearAndWeek expected = new YearAndWeek(moment.getWeekyear(), moment.getWeekOfWeekyear()); YearAndWeek actual = Times.getWeekOfYear(moment); assertThat(actual).isEqualTo(expected); } } @Test public void dayStartTest() { assertThat(Times.dayStart(testDate)).isEqualTo(testDate.withTimeAtStartOfDay()); assertThat(Times.dayStart(testDate).getMillisOfDay()).isEqualTo(0); assertThat(Times.dayStart(testNow)).isEqualTo(testNow.withTimeAtStartOfDay()); assertThat(Times.dayStart(testNow).getMillisOfDay()).isEqualTo(0); } @Test public void nextDayOfWeekTest() { assertThat(Times.nextDayOfWeek(Monday)).isEqualTo(ThuesDay); assertThat(Times.nextDayOfWeek(ThuesDay)).isEqualTo(WednesDay); assertThat(Times.nextDayOfWeek(WednesDay)).isEqualTo(ThursDay); assertThat(Times.nextDayOfWeek(ThursDay)).isEqualTo(FriDay); assertThat(Times.nextDayOfWeek(FriDay)).isEqualTo(Saturday); assertThat(Times.nextDayOfWeek(Saturday)).isEqualTo(Sunday); assertThat(Times.nextDayOfWeek(Sunday)).isEqualTo(Monday); } @Test public void previousDayOfWeekTest() { assertThat(Times.previousDayOfWeek(Monday)).isEqualTo(Sunday); assertThat(Times.previousDayOfWeek(ThuesDay)).isEqualTo(Monday); assertThat(Times.previousDayOfWeek(WednesDay)).isEqualTo(ThuesDay); assertThat(Times.previousDayOfWeek(ThursDay)).isEqualTo(WednesDay); assertThat(Times.previousDayOfWeek(FriDay)).isEqualTo(ThursDay); assertThat(Times.previousDayOfWeek(Saturday)).isEqualTo(FriDay); assertThat(Times.previousDayOfWeek(Sunday)).isEqualTo(Saturday); } @Test public void addDayOfWeektest() { assertThat(Times.addDayOfWeek(Monday, 6)).isEqualTo(Sunday); assertThat(Times.addDayOfWeek(Monday, 7)).isEqualTo(Monday); assertThat(Times.addDayOfWeek(Monday, 8)).isEqualTo(ThuesDay); assertThat(Times.addDayOfWeek(Monday, 14)).isEqualTo(Monday); assertThat(Times.addDayOfWeek(ThuesDay, 14)).isEqualTo(ThuesDay); assertThat(Times.addDayOfWeek(Monday, -14)).isEqualTo(Monday); assertThat(Times.addDayOfWeek(ThuesDay, -14)).isEqualTo(ThuesDay); } }