/*
* 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.Halfyear;
import kr.debop4j.timeperiod.Quarter;
import kr.debop4j.timeperiod.tools.Durations;
import kr.debop4j.timeperiod.tools.TimeSpec;
import kr.debop4j.timeperiod.tools.Times;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.junit.Test;
import java.util.Locale;
import static org.fest.assertions.Assertions.assertThat;
/**
* kr.debop4j.timeperiod.test.tools.DurationsTest
*
* @author 배성혁 sunghyouk.bae@gmail.com
* @since 13. 5. 21. 오전 11:24
*/
@Slf4j
public class DurationsTest {
private static final int currentYear = DateTime.now().getYear();
private static final Locale currentLocale = Locale.getDefault();
@Test
public void yearTest() {
assertThat(Durations.year(currentYear)).isEqualTo(new Duration(Times.startTimeOfYear(currentYear), Times.startTimeOfYear(currentYear + 1)));
assertThat(Durations.year(currentYear + 1)).isEqualTo(new Duration(Times.startTimeOfYear(currentYear + 1), Times.startTimeOfYear(currentYear + 2)));
assertThat(Durations.year(currentYear - 1)).isEqualTo(new Duration(Times.startTimeOfYear(currentYear - 1), Times.startTimeOfYear(currentYear)));
assertThat(Durations.year(currentYear)).isEqualTo(Durations.days(Times.getDaysOfYear(currentYear)));
assertThat(Durations.year(currentYear + 1)).isEqualTo(Durations.days(Times.getDaysOfYear(currentYear + 1)));
assertThat(Durations.year(currentYear - 1)).isEqualTo(Durations.days(Times.getDaysOfYear(currentYear - 1)));
}
@Test
public void halfyearTest() {
for (Halfyear halfyear : Halfyear.values()) {
int[] months = Times.getMonthsOfHalfyear(halfyear);
Duration duration = Durations.Zero;
for (int month : months) {
int daysInMonth = Times.getDaysInMonth(currentYear, month);
duration = duration.plus(daysInMonth * TimeSpec.MillisPerDay);
}
assertThat(Durations.halfyear(currentYear, halfyear)).isEqualTo(duration);
}
}
@Test
public void quarterTest() {
for (Quarter quarter : Quarter.values()) {
int[] months = Times.getMonthsOfQuarter(quarter);
Duration duration = Durations.Zero;
for (int month : months) {
int daysInMonth = Times.getDaysInMonth(currentYear, month);
duration = duration.plus(daysInMonth * TimeSpec.MillisPerDay);
}
assertThat(Durations.quarter(currentYear, quarter)).isEqualTo(duration);
}
}
@Test
public void monthTest() {
for (int i = 1; i <= TimeSpec.MonthsPerYear; i++) {
assertThat(Durations.month(currentYear, i)).isEqualTo(Duration.millis(Times.getDaysInMonth(currentYear, i) * TimeSpec.MillisPerDay));
}
}
@Test
public void weekTest() {
assertThat(Durations.Week).isEqualTo(Duration.millis(TimeSpec.DaysPerWeek * TimeSpec.MillisPerDay));
assertThat(Durations.weeks(0)).isEqualTo(Durations.Zero);
assertThat(Durations.weeks(1).getMillis()).isEqualTo(TimeSpec.DaysPerWeek * TimeSpec.MillisPerDay);
assertThat(Durations.weeks(2).getMillis()).isEqualTo(TimeSpec.DaysPerWeek * TimeSpec.MillisPerDay * 2);
assertThat(Durations.weeks(-1).getMillis()).isEqualTo(TimeSpec.DaysPerWeek * TimeSpec.MillisPerDay * -1);
assertThat(Durations.weeks(-2).getMillis()).isEqualTo(TimeSpec.DaysPerWeek * TimeSpec.MillisPerDay * -2);
}
@Test
public void dayTest() {
assertThat(Durations.Day).isEqualTo(Duration.millis(TimeSpec.MillisPerDay));
assertThat(Durations.days(0)).isEqualTo(Durations.Zero);
assertThat(Durations.days(1)).isEqualTo(Duration.millis(TimeSpec.MillisPerDay));
assertThat(Durations.days(2)).isEqualTo(Duration.millis(TimeSpec.MillisPerDay * 2));
assertThat(Durations.days(-2)).isEqualTo(Duration.millis(TimeSpec.MillisPerDay * -2));
assertThat(Durations.days(1, 23)).isEqualTo(Duration.standardDays(1).plus(Duration.standardHours(23)));
assertThat(Durations.days(1, 23, 22)).isEqualTo(Duration.standardDays(1).plus(Duration.standardHours(23)).plus(Duration.standardMinutes(22)));
assertThat(Durations.days(1, 23, 22, 55)).isEqualTo(Duration.standardDays(1)
.plus(Duration.standardHours(23))
.plus(Duration.standardMinutes(22))
.plus(Duration.standardSeconds(55)));
}
@Test
public void hourTest() {
assertThat(Durations.Hour).isEqualTo(Duration.standardHours(1));
assertThat(Durations.hours(0)).isEqualTo(Duration.standardHours(0));
assertThat(Durations.hours(1)).isEqualTo(Duration.standardHours(1));
assertThat(Durations.hours(2)).isEqualTo(Duration.standardHours(2));
assertThat(Durations.hours(-1)).isEqualTo(Duration.standardHours(-1));
assertThat(Durations.hours(-2)).isEqualTo(Duration.standardHours(-2));
assertThat(Durations.hours(23, 22)).isEqualTo(Duration.standardHours(23).plus(Duration.standardMinutes(22)));
assertThat(Durations.hours(23, 22, 55)).isEqualTo(Duration.standardHours(23).plus(Duration.standardMinutes(22)).plus(Duration.standardSeconds(55)));
}
@Test
public void minuteTest() {
assertThat(Durations.Minute).isEqualTo(Duration.standardMinutes(1));
assertThat(Durations.minutes(0)).isEqualTo(Duration.standardMinutes(0));
assertThat(Durations.minutes(1)).isEqualTo(Duration.standardMinutes(1));
assertThat(Durations.minutes(2)).isEqualTo(Duration.standardMinutes(2));
assertThat(Durations.minutes(-1)).isEqualTo(Duration.standardMinutes(-1));
assertThat(Durations.minutes(-2)).isEqualTo(Duration.standardMinutes(-2));
assertThat(Durations.minutes(22, 55)).isEqualTo(Duration.standardMinutes(22).plus(Duration.standardSeconds(55)));
assertThat(Durations.minutes(22, 55, 496)).isEqualTo(Duration.standardMinutes(22).plus(Duration.standardSeconds(55)).plus(496));
}
@Test
public void secondTest() {
assertThat(Durations.Second).isEqualTo(Duration.standardSeconds(1));
assertThat(Durations.seconds(0)).isEqualTo(Duration.standardSeconds(0));
assertThat(Durations.seconds(1)).isEqualTo(Duration.standardSeconds(1));
assertThat(Durations.seconds(2)).isEqualTo(Duration.standardSeconds(2));
assertThat(Durations.seconds(-1)).isEqualTo(Duration.standardSeconds(-1));
assertThat(Durations.seconds(-2)).isEqualTo(Duration.standardSeconds(-2));
assertThat(Durations.seconds(55, 496)).isEqualTo(Duration.standardSeconds(55).plus(496));
}
@Test
public void millisecondTest() {
assertThat(Durations.Millisecond).isEqualTo(Durations.millis(1));
assertThat(Durations.millis(0)).isEqualTo(Durations.millis(0));
assertThat(Durations.millis(1)).isEqualTo(Durations.millis(1));
assertThat(Durations.millis(2)).isEqualTo(Durations.millis(2));
assertThat(Durations.millis(-1)).isEqualTo(Durations.millis(-1));
assertThat(Durations.millis(-2)).isEqualTo(Durations.millis(-2));
}
}