/*
* 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.core.Action1;
import kr.debop4j.core.parallelism.Parallels;
import kr.debop4j.timeperiod.TimeCalendar;
import kr.debop4j.timeperiod.test.TimePeriodTestBase;
import kr.debop4j.timeperiod.timerange.YearRange;
import kr.debop4j.timeperiod.timerange.YearRangeCollection;
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.YearRangeCollectionTest
*
* @author 배성혁 sunghyouk.bae@gmail.com
* @since 13. 5. 26. 오전 12:12
*/
@Slf4j
public class YearRangeCollectionTest extends TimePeriodTestBase {
@Test
public void singleYears() {
final int startYear = 2004;
YearRangeCollection yearRanges = new YearRangeCollection(startYear, 1);
assertThat(yearRanges.getYearCount()).isEqualTo(1);
assertThat(yearRanges.getStartYear()).isEqualTo(startYear);
assertThat(yearRanges.getEndYear()).isEqualTo(startYear);
List<YearRange> years = yearRanges.getYears();
assertThat(years.size()).isEqualTo(1);
assertThat(years.get(0).isSamePeriod(new YearRange(startYear))).isTrue();
}
@Test
public void calenarMonths() {
final int startYear = 2004;
final int yearCount = 5;
YearRangeCollection yearRanges = new YearRangeCollection(startYear, yearCount, TimeCalendar.getEmptyOffset());
assertThat(yearRanges.getYearCount()).isEqualTo(yearCount);
assertThat(yearRanges.getStartYear()).isEqualTo(startYear);
assertThat(yearRanges.getEndYear()).isEqualTo(startYear + yearCount);
}
@Test
public void yearCounts() {
int[] yearCounts = new int[] { 1, 6, 48, 180, 365 };
final DateTime now = Times.now();
final DateTime today = Times.today();
for (int yearCount : yearCounts) {
final YearRangeCollection yearRanges = new YearRangeCollection(now, yearCount);
final DateTime startTime = yearRanges.getTimeCalendar().mapStart(Times.trimToYear(today));
final DateTime endTime = yearRanges.getTimeCalendar().mapEnd(startTime.plusYears(yearCount));
assertThat(yearRanges.getStart()).isEqualTo(startTime);
assertThat(yearRanges.getEnd()).isEqualTo(endTime);
final List<YearRange> items = yearRanges.getYears();
Parallels.run(yearCount, new Action1<Integer>() {
@Override
public void perform(Integer y) {
final YearRange item = items.get(y);
assertThat(item.getStart()).isEqualTo(startTime.plusYears(y));
assertThat(item.getEnd()).isEqualTo(yearRanges.getTimeCalendar().mapEnd(startTime.plusYears(y + 1)));
assertThat(item.getUnmappedStart()).isEqualTo(startTime.plusYears(y));
assertThat(item.getUnmappedEnd()).isEqualTo(startTime.plusYears(y + 1));
assertThat(item.isSamePeriod(new YearRange(yearRanges.getStart().plusYears(y)))).isTrue();
}
});
}
}
}