/*
* 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.timeranges;
import kr.debop4j.timeperiod.TimeCalendar;
import kr.debop4j.timeperiod.test.TimePeriodTestBase;
import kr.debop4j.timeperiod.timerange.HourRange;
import kr.debop4j.timeperiod.timerange.MinuteRange;
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 java.util.List;
import static org.fest.assertions.Assertions.assertThat;
/**
* kr.debop4j.timeperiod.test.timeranges.HourRangeTest
*
* @author 배성혁 sunghyouk.bae@gmail.com
* @since 13. 5. 25. 오후 8:19
*/
@Slf4j
public class HourRangeTest extends TimePeriodTestBase {
@Test
public void initValues() {
DateTime now = Times.now();
DateTime firstHour = Times.trimToMinute(now);
DateTime secondHour = firstHour.plusHours(1);
HourRange hourRange = new HourRange(now, TimeCalendar.getEmptyOffset());
assertThat(hourRange.getStart().getYear()).isEqualTo(firstHour.getYear());
assertThat(hourRange.getStart().getMonthOfYear()).isEqualTo(firstHour.getMonthOfYear());
assertThat(hourRange.getStart().getDayOfMonth()).isEqualTo(firstHour.getDayOfMonth());
assertThat(hourRange.getStart().getMinuteOfHour()).isEqualTo(0);
assertThat(hourRange.getStart().getSecondOfMinute()).isEqualTo(0);
assertThat(hourRange.getStart().getMillisOfSecond()).isEqualTo(0);
assertThat(hourRange.getEnd().getYear()).isEqualTo(secondHour.getYear());
assertThat(hourRange.getEnd().getMonthOfYear()).isEqualTo(secondHour.getMonthOfYear());
assertThat(hourRange.getEnd().getDayOfMonth()).isEqualTo(secondHour.getDayOfMonth());
assertThat(hourRange.getEnd().getMinuteOfHour()).isEqualTo(0);
assertThat(hourRange.getEnd().getSecondOfMinute()).isEqualTo(0);
assertThat(hourRange.getEnd().getMillisOfSecond()).isEqualTo(0);
}
@Test
public void defaultCalendar() {
DateTime now = Times.now();
DateTime today = Times.today();
for (int h = 0; h < TimeSpec.HoursPerDay; h++) {
HourRange hourRange = new HourRange(today.plusHours(h));
assertThat(hourRange.getYear()).isEqualTo(today.getYear());
assertThat(hourRange.getMonthOfYear()).isEqualTo(today.getMonthOfYear());
assertThat(hourRange.getDayOfMonth()).isEqualTo(today.getDayOfMonth());
assertThat(hourRange.getHourOfDay()).isEqualTo(h);
assertThat(hourRange.getStart()).isEqualTo(hourRange.getTimeCalendar().mapStart(today.plusHours(h)));
assertThat(hourRange.getEnd()).isEqualTo(hourRange.getTimeCalendar().mapEnd(today.plusHours(h + 1)));
}
}
@Test
public void constructorTest() {
DateTime now = Times.now();
HourRange hourRange = new HourRange(now);
assertThat(hourRange.getYear()).isEqualTo(now.getYear());
assertThat(hourRange.getMonthOfYear()).isEqualTo(now.getMonthOfYear());
assertThat(hourRange.getDayOfMonth()).isEqualTo(now.getDayOfMonth());
assertThat(hourRange.getHourOfDay()).isEqualTo(now.getHourOfDay());
hourRange = new HourRange(now.getYear(), now.getMonthOfYear(), now.getDayOfMonth(), now.getHourOfDay());
assertThat(hourRange.getYear()).isEqualTo(now.getYear());
assertThat(hourRange.getMonthOfYear()).isEqualTo(now.getMonthOfYear());
assertThat(hourRange.getDayOfMonth()).isEqualTo(now.getDayOfMonth());
assertThat(hourRange.getHourOfDay()).isEqualTo(now.getHourOfDay());
}
@Test
public void addHourTest() {
HourRange hourRange = new HourRange();
assertThat(hourRange.previousHour().getHourOfDay()).isEqualTo(hourRange.getStart().plusHours(-1).getHourOfDay());
assertThat(hourRange.nextHour().getHourOfDay()).isEqualTo(hourRange.getStart().plusHours(1).getHourOfDay());
hourRange = new HourRange(TimeCalendar.getEmptyOffset());
assertThat(hourRange.addHours(0)).isEqualTo(hourRange);
HourRange prevRange = hourRange.previousHour();
assertThat(hourRange.addHours(-1).getYear()).isEqualTo(prevRange.getYear());
assertThat(hourRange.addHours(-1).getMonthOfYear()).isEqualTo(prevRange.getMonthOfYear());
assertThat(hourRange.addHours(-1).getDayOfMonth()).isEqualTo(prevRange.getDayOfMonth());
assertThat(hourRange.addHours(-1).getHourOfDay()).isEqualTo(prevRange.getHourOfDay());
HourRange nextRange = hourRange.nextHour();
assertThat(hourRange.addHours(1).getYear()).isEqualTo(nextRange.getYear());
assertThat(hourRange.addHours(1).getMonthOfYear()).isEqualTo(nextRange.getMonthOfYear());
assertThat(hourRange.addHours(1).getDayOfMonth()).isEqualTo(nextRange.getDayOfMonth());
assertThat(hourRange.addHours(1).getHourOfDay()).isEqualTo(nextRange.getHourOfDay());
for (int h = -100; h < 100; h += 5) {
HourRange range = hourRange.addHours(h);
HourRange range2 = hourRange.addHours(h);
assertThat(range.getYear()).isEqualTo(range2.getYear());
assertThat(range.getMonthOfYear()).isEqualTo(range2.getMonthOfYear());
assertThat(range.getDayOfMonth()).isEqualTo(range2.getDayOfMonth());
assertThat(range.getHourOfDay()).isEqualTo(range2.getHourOfDay());
}
}
@Test
public void getMinutesTest() {
HourRange hourRange = new HourRange();
List<MinuteRange> minutes = hourRange.getMinutes();
assertThat(minutes.size()).isEqualTo(TimeSpec.MinutesPerHour);
for (int i = 0; i < TimeSpec.MinutesPerHour; i++) {
MinuteRange minute = minutes.get(i);
assertThat(minute.getStart()).isEqualTo(hourRange.getStart().plusMinutes(i));
assertThat(minute.getUnmappedStart()).isEqualTo(hourRange.getStart().plusMinutes(i));
assertThat(minute.getEnd()).isEqualTo(minute.getTimeCalendar().mapEnd(hourRange.getStart().plusMinutes(i + 1)));
assertThat(minute.getUnmappedEnd()).isEqualTo(hourRange.getStart().plusMinutes(i + 1));
}
}
}