/* * 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.base; import kr.debop4j.timeperiod.PeriodRelation; import kr.debop4j.timeperiod.TimeRange; import kr.debop4j.timeperiod.test.samples.TimeRangePeriodRelationTestData; 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 static org.fest.assertions.Assertions.assertThat; /** * kr.debop4j.timeperiod.test.base.TimeRangeTest * * @author 배성혁 sunghyouk.bae@gmail.com * @since 13. 5. 17. 오후 2:16 */ @Slf4j public class TimeRangeTest { private final Duration duration = new Duration(Durations.hours(1)); private final Duration offset = Durations.Second; private DateTime start = DateTime.now(); private DateTime end = start.plus(duration); private TimeRangePeriodRelationTestData testData = new TimeRangePeriodRelationTestData(start, end, offset); @Test public void anytimeTest() throws Exception { assertThat(TimeRange.Anytime.getStart()).isEqualTo(TimeSpec.MinPeriodTime); assertThat(TimeRange.Anytime.getEnd()).isEqualTo(TimeSpec.MaxPeriodTime); assertThat(TimeRange.Anytime.isAnytime()).isTrue(); assertThat(TimeRange.Anytime.isReadonly()).isTrue(); assertThat(TimeRange.Anytime.hasPeriod()).isFalse(); assertThat(TimeRange.Anytime.hasStart()).isFalse(); assertThat(TimeRange.Anytime.hasEnd()).isFalse(); assertThat(TimeRange.Anytime.isMoment()).isFalse(); } @Test public void defaultContructorTest() throws Exception { TimeRange range = new TimeRange(); assertThat(range).isNotEqualTo(TimeRange.Anytime); assertThat(Times.getRelation(range, TimeRange.Anytime)).isEqualTo(PeriodRelation.ExactMatch); assertThat(range.isAnytime()).isTrue(); assertThat(range.isReadonly()).isFalse(); assertThat(range.hasPeriod()).isFalse(); assertThat(range.hasStart()).isFalse(); assertThat(range.hasEnd()).isFalse(); assertThat(range.isMoment()).isFalse(); } @Test public void momentTest() throws Exception { DateTime moment = Times.now(); TimeRange range = new TimeRange(moment); assertThat(range.hasStart()).isTrue(); assertThat(range.hasEnd()).isTrue(); assertThat(range.getDuration()).isEqualTo(TimeSpec.MinDuration); assertThat(range.isAnytime()).isFalse(); assertThat(range.isMoment()).isTrue(); assertThat(range.hasPeriod()).isTrue(); } @Test public void momentByPeriod() { TimeRange range = new TimeRange(Times.now(), Duration.ZERO); assertThat(range.isMoment()).isTrue(); } @Test public void nonMomentTest() { TimeRange range = new TimeRange(Times.now(), TimeSpec.MinPositiveDuration); assertThat(range.isMoment()).isFalse(); assertThat(range.getDuration()).isEqualTo(TimeSpec.MinPositiveDuration); } @Test public void hasStartTest() { // 현재부터 ~ TimeRange range = new TimeRange(Times.now(), (DateTime) null); assertThat(range.hasStart()).isTrue(); assertThat(range.hasEnd()).isFalse(); } @Test public void hasEndTest() { // ~ 현재까지 TimeRange range = new TimeRange(null, Times.now()); assertThat(range.hasStart()).isFalse(); assertThat(range.hasEnd()).isTrue(); } @Test public void startEndTest() { TimeRange range = new TimeRange(start, end); assertThat(range.getStart()).isEqualTo(start); assertThat(range.getEnd()).isEqualTo(end); assertThat(range.getDuration()).isEqualTo(duration); assertThat(range.hasPeriod()).isTrue(); assertThat(range.isAnytime()).isFalse(); assertThat(range.isMoment()).isFalse(); assertThat(range.isReadonly()).isFalse(); } @Test public void startEndSwapTest() { TimeRange range = new TimeRange(end, start); assertThat(range.getStart()).isEqualTo(start); assertThat(range.getEnd()).isEqualTo(end); assertThat(range.getDuration()).isEqualTo(duration); assertThat(range.hasPeriod()).isTrue(); assertThat(range.isAnytime()).isFalse(); assertThat(range.isMoment()).isFalse(); assertThat(range.isReadonly()).isFalse(); } @Test public void startAndDurationTest() { TimeRange range = new TimeRange(start, duration); assertThat(range.getStart()).isEqualTo(start); assertThat(range.getEnd()).isEqualTo(end); assertThat(range.getDuration()).isEqualTo(duration); assertThat(range.hasPeriod()).isTrue(); assertThat(range.isAnytime()).isFalse(); assertThat(range.isMoment()).isFalse(); assertThat(range.isReadonly()).isFalse(); } @Test public void startAndNegateDurationTest() { TimeRange range = new TimeRange(start, Durations.negate(duration)); assertThat(range.getStart()).isEqualTo(start.minus(duration)); assertThat(range.getEnd()).isEqualTo(end.minus(duration)); assertThat(range.getDuration()).isEqualTo(duration); assertThat(range.hasPeriod()).isTrue(); assertThat(range.isAnytime()).isFalse(); assertThat(range.isMoment()).isFalse(); assertThat(range.isReadonly()).isFalse(); } @Test public void copyConstructorTest() { TimeRange source = new TimeRange(start, start.plusHours(1), true); TimeRange copy = new TimeRange(source); assertThat(copy.getStart()).isEqualTo(source.getStart()); assertThat(copy.getEnd()).isEqualTo(source.getEnd()); assertThat(copy.getDuration()).isEqualTo(source.getDuration()); assertThat(copy.isReadonly()).isEqualTo(source.isReadonly()); assertThat(copy.hasPeriod()).isTrue(); assertThat(copy.isAnytime()).isFalse(); assertThat(copy.isMoment()).isFalse(); } @Test public void startTest() { TimeRange range = new TimeRange(start, start.plusHours(1)); assertThat(range.getStart()).isEqualTo(start); DateTime chanedStart = start.plusHours(1); range.setStart(chanedStart); assertThat(range.getStart()).isEqualTo(chanedStart); } @Test(expected = AssertionError.class) public void startReadonlyTest() { TimeRange range = new TimeRange(Times.now(), Durations.hours(1), true); range.setStart(range.getStart().minusHours(2)); } @Test(expected = AssertionError.class) public void startOutOfRangeTest() { TimeRange range = new TimeRange(Times.now(), Durations.hours(1), false); range.setStart(range.getStart().plusHours(2)); } @Test public void endTest() throws Exception { TimeRange range = new TimeRange(end.minusHours(1), end); assertThat(range.getEnd()).isEqualTo(end); DateTime changedEnd = end.plusHours(1); range.setEnd(changedEnd); assertThat(range.getEnd()).isEqualTo(changedEnd); } @Test(expected = AssertionError.class) public void endReadonlyTest() { TimeRange range = new TimeRange(Times.now(), Durations.hours(1), true); range.setEnd(range.getEnd().plusHours(1)); } @Test(expected = AssertionError.class) public void endOutOfRangeTest() { TimeRange range = new TimeRange(Times.now(), Durations.hours(1), false); range.setEnd(range.getEnd().minusHours(2)); } @Test public void hasInsideDateTimeTest() { TimeRange range = new TimeRange(start, end); assertThat(range.getEnd()).isEqualTo(end); assertThat(range.hasInside(start.minus(duration))).isFalse(); assertThat(range.hasInside(start)).isTrue(); assertThat(range.hasInside(start.plus(duration))).isTrue(); assertThat(range.hasInside(end.minus(duration))).isTrue(); assertThat(range.hasInside(end)).isTrue(); assertThat(range.hasInside(end.plus(duration))).isFalse(); } @Test public void hasInsidePeriodTest() { TimeRange range = new TimeRange(start, end); assertThat(range.getEnd()).isEqualTo(end); // before TimeRange before1 = new TimeRange(start.minusHours(2), start.minusHours(1)); TimeRange before2 = new TimeRange(start.minusMillis(1), end); TimeRange before3 = new TimeRange(start.minusMillis(1), start); assertThat(range.hasInside(before1)).isFalse(); assertThat(range.hasInside(before2)).isFalse(); assertThat(range.hasInside(before3)).isFalse(); // after TimeRange after1 = new TimeRange(start.plusHours(1), end.plusHours(1)); TimeRange after2 = new TimeRange(start, end.plusMillis(1)); TimeRange after3 = new TimeRange(end, end.plusMillis(1)); assertThat(range.hasInside(after1)).isFalse(); assertThat(range.hasInside(after2)).isFalse(); assertThat(range.hasInside(after3)).isFalse(); // inside assertThat(range.hasInside(range)).isTrue(); TimeRange inside1 = new TimeRange(start.plusMillis(1), end); TimeRange inside2 = new TimeRange(start.plusMillis(1), end.minusMillis(1)); TimeRange inside3 = new TimeRange(start, end.minusMillis(1)); assertThat(range.hasInside(inside1)).isTrue(); assertThat(range.hasInside(inside2)).isTrue(); assertThat(range.hasInside(inside3)).isTrue(); } @Test public void copyTest() { TimeRange readonlyTimeRange = new TimeRange(start, end); assertThat(readonlyTimeRange.copy()).isEqualTo(readonlyTimeRange); assertThat(readonlyTimeRange.copy(Duration.ZERO)).isEqualTo(readonlyTimeRange); TimeRange range = new TimeRange(start, end); assertThat(range.getStart()).isEqualTo(start); assertThat(range.getEnd()).isEqualTo(end); TimeRange noMove = range.copy(Durations.Zero); assertThat(noMove.getStart()).isEqualTo(range.getStart()); assertThat(noMove.getEnd()).isEqualTo(range.getEnd()); assertThat(noMove.getDuration()).isEqualTo(range.getDuration()); assertThat(noMove).isEqualTo(noMove); Duration forwardOffset = Durations.hours(2, 30, 15); TimeRange forward = range.copy(forwardOffset); assertThat(forward.getStart()).isEqualTo(start.plus(forwardOffset)); assertThat(forward.getEnd()).isEqualTo(end.plus(forwardOffset)); assertThat(forward.getDuration()).isEqualTo(duration); Duration backwardOffset = Durations.hours(-1, 10, 30); TimeRange backward = range.copy(backwardOffset); assertThat(backward.getStart()).isEqualTo(start.plus(backwardOffset)); assertThat(backward.getEnd()).isEqualTo(end.plus(backwardOffset)); assertThat(backward.getDuration()).isEqualTo(duration); } @Test public void moveTest() { TimeRange moveZero = new TimeRange(start, end); moveZero.move(Durations.Zero); assertThat(moveZero.getStart()).isEqualTo(start); assertThat(moveZero.getEnd()).isEqualTo(end); assertThat(moveZero.getDuration()).isEqualTo(duration); TimeRange forward = new TimeRange(start, end); Duration forwardOffset = Durations.hours(2, 30, 15); forward.move(forwardOffset); assertThat(forward.getStart()).isEqualTo(start.plus(forwardOffset)); assertThat(forward.getEnd()).isEqualTo(end.plus(forwardOffset)); assertThat(forward.getDuration()).isEqualTo(duration); TimeRange backward = new TimeRange(start, end); Duration backwardOffset = Durations.hours(-1, 10, 30); backward.move(backwardOffset); assertThat(backward.getStart()).isEqualTo(start.plus(backwardOffset)); assertThat(backward.getEnd()).isEqualTo(end.plus(backwardOffset)); assertThat(backward.getDuration()).isEqualTo(duration); } @Test public void expandStartToTest() { TimeRange range = new TimeRange(start, end); range.expandStartTo(start.plusMillis(1)); assertThat(range.getStart()).isEqualTo(start); range.expandStartTo(start.minusMillis(1)); assertThat(range.getStart()).isEqualTo(start.minusMillis(1)); } @Test public void expandEndToTest() { TimeRange range = new TimeRange(start, end); range.expandEndTo(end.minusMillis(1)); assertThat(range.getEnd()).isEqualTo(end); range.expandEndTo(end.plusMillis(1)); assertThat(range.getEnd()).isEqualTo(end.plusMillis(1)); } @Test public void expandToDateTimeTest() { TimeRange range = new TimeRange(start, end); // start range.expandTo(start.plusMillis(1)); assertThat(range.getStart()).isEqualTo(start); range.expandTo(start.minusMillis(1)); assertThat(range.getStart()).isEqualTo(start.minusMillis(1)); // end range.expandTo(end.minusMillis(1)); assertThat(range.getEnd()).isEqualTo(end); range.expandTo(end.plusMillis(1)); assertThat(range.getEnd()).isEqualTo(end.plusMillis(1)); } @Test public void expandToPeriodTest() { TimeRange range = new TimeRange(start, end); // no expansion range.expandTo(new TimeRange(start.plusMillis(1), end.minusMillis(1))); assertThat(range.getStart()).isEqualTo(start); assertThat(range.getEnd()).isEqualTo(end); // start DateTime changedStart = start.minusMinutes(1); range.expandTo(new TimeRange(changedStart, end)); assertThat(range.getStart()).isEqualTo(changedStart); assertThat(range.getEnd()).isEqualTo(end); // end DateTime changedEnd = end.plusMinutes(1); range.expandTo(new TimeRange(changedStart, changedEnd)); assertThat(range.getStart()).isEqualTo(changedStart); assertThat(range.getEnd()).isEqualTo(changedEnd); // start/end changedStart = changedStart.minusMinutes(1); changedEnd = changedEnd.plusMinutes(1); range.expandTo(new TimeRange(changedStart, changedEnd)); assertThat(range.getStart()).isEqualTo(changedStart); assertThat(range.getEnd()).isEqualTo(changedEnd); } @Test public void shrinkStartToTest() { TimeRange range = new TimeRange(start, end); range.shrinkStartTo(start.minusMillis(1)); assertThat(range.getStart()).isEqualTo(start); range.shrinkStartTo(start.plusMillis(1)); assertThat(range.getStart()).isEqualTo(start.plusMillis(1)); } @Test public void shrinkEndToTest() { TimeRange range = new TimeRange(start, end); range.shrinkEndTo(end.plusMillis(1)); assertThat(range.getEnd()).isEqualTo(end); range.shrinkEndTo(end.minusMillis(1)); assertThat(range.getEnd()).isEqualTo(end.minusMillis(1)); } @Test public void shrinkToDateTimeTest() { TimeRange range = new TimeRange(start, end); // start range.shrinkTo(start.minusMillis(1)); assertThat(range.getStart()).isEqualTo(start); range.shrinkTo(start.plusMillis(1)); assertThat(range.getStart()).isEqualTo(start.plusMillis(1)); range = new TimeRange(start, end); // end range.shrinkTo(end.plusMillis(1)); assertThat(range.getEnd()).isEqualTo(end); range.shrinkTo(end.minusMillis(1)); assertThat(range.getEnd()).isEqualTo(end.minusMillis(1)); } @Test public void shrinkToPeriodTest() { TimeRange range = new TimeRange(start, end); // no expansion range.shrinkTo(new TimeRange(start.minusMillis(1), end.plusMillis(1))); assertThat(range.getStart()).isEqualTo(start); assertThat(range.getEnd()).isEqualTo(end); // start DateTime changedStart = start.plusMinutes(1); range.shrinkTo(new TimeRange(changedStart, end)); assertThat(range.getStart()).isEqualTo(changedStart); assertThat(range.getEnd()).isEqualTo(end); // end DateTime changedEnd = end.minusMinutes(1); range.shrinkTo(new TimeRange(changedStart, changedEnd)); assertThat(range.getStart()).isEqualTo(changedStart); assertThat(range.getEnd()).isEqualTo(changedEnd); // start/end changedStart = changedStart.plusMinutes(1); changedEnd = changedEnd.minusMinutes(1); range.shrinkTo(new TimeRange(changedStart, changedEnd)); assertThat(range.getStart()).isEqualTo(changedStart); assertThat(range.getEnd()).isEqualTo(changedEnd); } @Test public void isSamePeriodTest() { TimeRange range1 = new TimeRange(start, end); TimeRange range2 = new TimeRange(start, end); assertThat(range1.isSamePeriod(range1)).isTrue(); assertThat(range2.isSamePeriod(range2)).isTrue(); assertThat(range1.isSamePeriod(range2)).isTrue(); assertThat(range2.isSamePeriod(range1)).isTrue(); assertThat(range1.isSamePeriod(TimeRange.Anytime)).isFalse(); assertThat(range2.isSamePeriod(TimeRange.Anytime)).isFalse(); range1.move(Durations.Millisecond); assertThat(range1.isSamePeriod(range2)).isFalse(); assertThat(range2.isSamePeriod(range1)).isFalse(); range1.move(Durations.millis(-1)); assertThat(range1.isSamePeriod(range2)).isTrue(); assertThat(range2.isSamePeriod(range1)).isTrue(); } @Test public void hasInsideTest() { assertThat(testData.getReference().hasInside(testData.getBefore())).isFalse(); assertThat(testData.getReference().hasInside(testData.getStartTouching())).isFalse(); assertThat(testData.getReference().hasInside(testData.getStartInside())).isFalse(); assertThat(testData.getReference().hasInside(testData.getInsideStartTouching())).isFalse(); assertThat(testData.getReference().hasInside(testData.getEnclosingStartTouching())).isTrue(); assertThat(testData.getReference().hasInside(testData.getEnclosing())).isTrue(); assertThat(testData.getReference().hasInside(testData.getEnclosingEndTouching())).isTrue(); assertThat(testData.getReference().hasInside(testData.getExactMatch())).isTrue(); assertThat(testData.getReference().hasInside(testData.getInside())).isFalse(); assertThat(testData.getReference().hasInside(testData.getInsideEndTouching())).isFalse(); assertThat(testData.getReference().hasInside(testData.getEndTouching())).isFalse(); assertThat(testData.getReference().hasInside(testData.getAfter())).isFalse(); } @Test public void intersectsWithTest() { assertThat(testData.getReference().intersectsWith(testData.getBefore())).isFalse(); assertThat(testData.getReference().intersectsWith(testData.getStartTouching())).isTrue(); assertThat(testData.getReference().intersectsWith(testData.getStartInside())).isTrue(); assertThat(testData.getReference().intersectsWith(testData.getInsideStartTouching())).isTrue(); assertThat(testData.getReference().intersectsWith(testData.getEnclosingStartTouching())).isTrue(); assertThat(testData.getReference().intersectsWith(testData.getEnclosing())).isTrue(); assertThat(testData.getReference().intersectsWith(testData.getEnclosingEndTouching())).isTrue(); assertThat(testData.getReference().intersectsWith(testData.getExactMatch())).isTrue(); assertThat(testData.getReference().intersectsWith(testData.getInside())).isTrue(); assertThat(testData.getReference().intersectsWith(testData.getInsideEndTouching())).isTrue(); assertThat(testData.getReference().intersectsWith(testData.getEndTouching())).isTrue(); assertThat(testData.getReference().intersectsWith(testData.getAfter())).isFalse(); } @Test public void overlapsWithTest() { assertThat(testData.getReference().overlapsWith(testData.getBefore())).isFalse(); assertThat(testData.getReference().overlapsWith(testData.getStartTouching())).isFalse(); assertThat(testData.getReference().overlapsWith(testData.getStartInside())).isTrue(); assertThat(testData.getReference().overlapsWith(testData.getInsideStartTouching())).isTrue(); assertThat(testData.getReference().overlapsWith(testData.getEnclosingStartTouching())).isTrue(); assertThat(testData.getReference().overlapsWith(testData.getEnclosing())).isTrue(); assertThat(testData.getReference().overlapsWith(testData.getEnclosingEndTouching())).isTrue(); assertThat(testData.getReference().overlapsWith(testData.getExactMatch())).isTrue(); assertThat(testData.getReference().overlapsWith(testData.getInside())).isTrue(); assertThat(testData.getReference().overlapsWith(testData.getInsideEndTouching())).isTrue(); assertThat(testData.getReference().overlapsWith(testData.getEndTouching())).isFalse(); assertThat(testData.getReference().overlapsWith(testData.getAfter())).isFalse(); } @Test public void intersectsWithDateTimeTest() { TimeRange range = new TimeRange(start, end); // before assertThat(range.intersectsWith(new TimeRange(start.minusHours(2), start.minusHours(1)))).isFalse(); assertThat(range.intersectsWith(new TimeRange(start.minusHours(1), start))).isTrue(); assertThat(range.intersectsWith(new TimeRange(start.minusHours(1), start.plusMillis(1)))).isTrue(); // after assertThat(range.intersectsWith(new TimeRange(end.plusHours(1), end.plusHours(2)))).isFalse(); assertThat(range.intersectsWith(new TimeRange(end, end.plusMillis(1)))).isTrue(); assertThat(range.intersectsWith(new TimeRange(end.minusMillis(1), end.plusMillis(1)))).isTrue(); // intersect assertThat(range.intersectsWith(range)).isTrue(); assertThat(range.intersectsWith(new TimeRange(start.minusMillis(1), end.plusHours(2)))).isTrue(); assertThat(range.intersectsWith(new TimeRange(start.minusMillis(1), start.plusMillis(1)))).isTrue(); assertThat(range.intersectsWith(new TimeRange(end.minusMillis(1), end.plusMillis(1)))).isTrue(); } @Test public void getIntersectionTest() { TimeRange range = new TimeRange(start, end); // before assertThat(range.getIntersection(new TimeRange(start.minusHours(2), start.minusHours(1)))).isNull(); assertThat(range.getIntersection(new TimeRange(start.minusMillis(1), start))).isEqualTo(new TimeRange(start)); assertThat(range.getIntersection(new TimeRange(start.minusHours(1), start.plusMillis(1)))).isEqualTo(new TimeRange(start, start.plusMillis(1))); // after assertThat(range.getIntersection(new TimeRange(end.plusHours(1), end.plusHours(2)))).isNull(); assertThat(range.getIntersection(new TimeRange(end, end.plusMillis(1)))).isEqualTo(new TimeRange(end)); assertThat(range.getIntersection(new TimeRange(end.minusMillis(1), end.plusMillis(1)))).isEqualTo(new TimeRange(end.minusMillis(1), end)); // intersect assertThat(range.getIntersection(range)).isEqualTo(range); assertThat(range.getIntersection(new TimeRange(start.minusMillis(1), end.plusMillis(1)))).isEqualTo(range); assertThat(range.getIntersection(new TimeRange(start.plusMillis(1), end.minusMillis(1)))).isEqualTo(new TimeRange(start.plusMillis(1), end.minusMillis(1))); } @Test public void getRelationTest() { assertThat(testData.getReference().getRelation(testData.getBefore())).isEqualTo(PeriodRelation.Before); assertThat(testData.getReference().getRelation(testData.getStartTouching())).isEqualTo(PeriodRelation.StartTouching); assertThat(testData.getReference().getRelation(testData.getStartInside())).isEqualTo(PeriodRelation.StartInside); assertThat(testData.getReference().getRelation(testData.getInsideStartTouching())).isEqualTo(PeriodRelation.InsideStartTouching); assertThat(testData.getReference().getRelation(testData.getEnclosing())).isEqualTo(PeriodRelation.Enclosing); assertThat(testData.getReference().getRelation(testData.getExactMatch())).isEqualTo(PeriodRelation.ExactMatch); assertThat(testData.getReference().getRelation(testData.getInside())).isEqualTo(PeriodRelation.Inside); assertThat(testData.getReference().getRelation(testData.getInsideEndTouching())).isEqualTo(PeriodRelation.InsideEndTouching); assertThat(testData.getReference().getRelation(testData.getEndInside())).isEqualTo(PeriodRelation.EndInside); assertThat(testData.getReference().getRelation(testData.getEndTouching())).isEqualTo(PeriodRelation.EndTouching); assertThat(testData.getReference().getRelation(testData.getAfter())).isEqualTo(PeriodRelation.After); // reference assertThat(testData.getReference().getStart()).isEqualTo(start); assertThat(testData.getReference().getEnd()).isEqualTo(end); assertThat(testData.getReference().isReadonly()).isTrue(); // after assertThat(testData.getAfter().isReadonly()).isTrue(); assertThat(testData.getAfter().getStart().compareTo(start)).isLessThan(0); assertThat(testData.getAfter().getEnd().compareTo(start)).isLessThan(0); assertThat(testData.getReference().hasInside(testData.getAfter().getStart())).isFalse(); assertThat(testData.getReference().hasInside(testData.getAfter().getEnd())).isFalse(); assertThat(testData.getReference().getRelation(testData.getAfter())).isEqualTo(PeriodRelation.After); // start touching assertThat(testData.getStartTouching().isReadonly()).isTrue(); assertThat(testData.getStartTouching().getStart().getMillis()).isLessThan(start.getMillis()); assertThat(testData.getStartTouching().getEnd()).isEqualTo(start); assertThat(testData.getReference().hasInside(testData.getStartTouching().getStart())).isFalse(); assertThat(testData.getReference().hasInside(testData.getStartTouching().getEnd())).isTrue(); assertThat(testData.getReference().getRelation(testData.getStartTouching())).isEqualTo(PeriodRelation.StartTouching); // start inside assertThat(testData.getStartInside().isReadonly()).isTrue(); assertThat(testData.getStartInside().getStart().getMillis()).isLessThan(start.getMillis()); assertThat(testData.getStartInside().getEnd().getMillis()).isLessThan(end.getMillis()); assertThat(testData.getReference().hasInside(testData.getStartInside().getStart())).isFalse(); assertThat(testData.getReference().hasInside(testData.getStartInside().getEnd())).isTrue(); assertThat(testData.getReference().getRelation(testData.getStartInside())).isEqualTo(PeriodRelation.StartInside); // inside start touching assertThat(testData.getInsideStartTouching().isReadonly()).isTrue(); assertThat(testData.getInsideStartTouching().getStart().getMillis()).isEqualTo(start.getMillis()); assertThat(testData.getInsideStartTouching().getEnd().getMillis()).isGreaterThan(end.getMillis()); assertThat(testData.getReference().hasInside(testData.getInsideStartTouching().getStart())).isTrue(); assertThat(testData.getReference().hasInside(testData.getInsideStartTouching().getEnd())).isFalse(); assertThat(testData.getReference().getRelation(testData.getInsideStartTouching())).isEqualTo(PeriodRelation.InsideStartTouching); // enclosing start touching assertThat(testData.getInsideStartTouching().isReadonly()).isTrue(); assertThat(testData.getInsideStartTouching().getStart().getMillis()).isEqualTo(start.getMillis()); assertThat(testData.getInsideStartTouching().getEnd().getMillis()).isGreaterThan(end.getMillis()); assertThat(testData.getReference().hasInside(testData.getInsideStartTouching().getStart())).isTrue(); assertThat(testData.getReference().hasInside(testData.getInsideStartTouching().getEnd())).isFalse(); assertThat(testData.getReference().getRelation(testData.getInsideStartTouching())).isEqualTo(PeriodRelation.InsideStartTouching); // enclosing assertThat(testData.getEnclosing().isReadonly()).isTrue(); assertThat(testData.getEnclosing().getStart().getMillis()).isGreaterThan(start.getMillis()); assertThat(testData.getEnclosing().getEnd().getMillis()).isLessThan(end.getMillis()); assertThat(testData.getReference().hasInside(testData.getEnclosing().getStart())).isTrue(); assertThat(testData.getReference().hasInside(testData.getEnclosing().getEnd())).isTrue(); assertThat(testData.getReference().getRelation(testData.getEnclosing())).isEqualTo(PeriodRelation.Enclosing); // enclosing end touching assertThat(testData.getEnclosingEndTouching().isReadonly()).isTrue(); assertThat(testData.getEnclosingEndTouching().getStart().getMillis()).isGreaterThan(start.getMillis()); assertThat(testData.getEnclosingEndTouching().getEnd().getMillis()).isEqualTo(end.getMillis()); assertThat(testData.getReference().hasInside(testData.getEnclosingEndTouching().getStart())).isTrue(); assertThat(testData.getReference().hasInside(testData.getEnclosingEndTouching().getEnd())).isTrue(); assertThat(testData.getReference().getRelation(testData.getEnclosingEndTouching())).isEqualTo(PeriodRelation.EnclosingEndTouching); // exact match assertThat(testData.getExactMatch().isReadonly()).isTrue(); assertThat(testData.getExactMatch().getStart().getMillis()).isEqualTo(start.getMillis()); assertThat(testData.getExactMatch().getEnd().getMillis()).isEqualTo(end.getMillis()); assertThat(testData.getReference().hasInside(testData.getExactMatch().getStart())).isTrue(); assertThat(testData.getReference().hasInside(testData.getExactMatch().getEnd())).isTrue(); assertThat(testData.getReference().getRelation(testData.getExactMatch())).isEqualTo(PeriodRelation.ExactMatch); // inside assertThat(testData.getInside().isReadonly()).isTrue(); assertThat(testData.getInside().getStart().getMillis()).isLessThan(start.getMillis()); assertThat(testData.getInside().getEnd().getMillis()).isGreaterThan(end.getMillis()); assertThat(testData.getReference().hasInside(testData.getInside().getStart())).isFalse(); assertThat(testData.getReference().hasInside(testData.getInside().getEnd())).isFalse(); assertThat(testData.getReference().getRelation(testData.getInside())).isEqualTo(PeriodRelation.Inside); // inside end touching assertThat(testData.getInsideEndTouching().isReadonly()).isTrue(); assertThat(testData.getInsideEndTouching().getStart().getMillis()).isLessThan(start.getMillis()); assertThat(testData.getInsideEndTouching().getEnd().getMillis()).isEqualTo(end.getMillis()); assertThat(testData.getReference().hasInside(testData.getInsideEndTouching().getStart())).isFalse(); assertThat(testData.getReference().hasInside(testData.getInsideEndTouching().getEnd())).isTrue(); assertThat(testData.getReference().getRelation(testData.getInsideEndTouching())).isEqualTo(PeriodRelation.InsideEndTouching); // end inside assertThat(testData.getEndInside().isReadonly()).isTrue(); assertThat(testData.getEndInside().getStart().getMillis()).isGreaterThan(start.getMillis()); assertThat(testData.getEndInside().getStart().getMillis()).isLessThan(end.getMillis()); assertThat(testData.getEndInside().getEnd().getMillis()).isGreaterThan(end.getMillis()); assertThat(testData.getReference().hasInside(testData.getEndInside().getStart())).isTrue(); assertThat(testData.getReference().hasInside(testData.getEndInside().getEnd())).isFalse(); assertThat(testData.getReference().getRelation(testData.getEndInside())).isEqualTo(PeriodRelation.EndInside); // end touching assertThat(testData.getEndTouching().isReadonly()).isTrue(); assertThat(testData.getEndTouching().getStart().getMillis()).isEqualTo(end.getMillis()); assertThat(testData.getEndTouching().getEnd().getMillis()).isGreaterThan(end.getMillis()); assertThat(testData.getReference().hasInside(testData.getEndTouching().getStart())).isTrue(); assertThat(testData.getReference().hasInside(testData.getEndTouching().getEnd())).isFalse(); assertThat(testData.getReference().getRelation(testData.getEndTouching())).isEqualTo(PeriodRelation.EndTouching); // before assertThat(testData.getBefore().isReadonly()).isTrue(); assertThat(testData.getBefore().getStart().getMillis()).isGreaterThan(end.getMillis()); assertThat(testData.getBefore().getEnd().getMillis()).isGreaterThan(end.getMillis()); assertThat(testData.getReference().hasInside(testData.getBefore().getStart())).isFalse(); assertThat(testData.getReference().hasInside(testData.getBefore().getEnd())).isFalse(); assertThat(testData.getReference().getRelation(testData.getBefore())).isEqualTo(PeriodRelation.Before); } @Test public void resetTest() { TimeRange range = new TimeRange(start, end); assertThat(range.getStart()).isEqualTo(start); assertThat(range.hasStart()).isTrue(); assertThat(range.getEnd()).isEqualTo(end); assertThat(range.hasEnd()).isTrue(); range.reset(); assertThat(range.getStart()).isEqualTo(TimeSpec.MinPeriodTime); assertThat(range.hasStart()).isFalse(); assertThat(range.getEnd()).isEqualTo(TimeSpec.MaxPeriodTime); assertThat(range.hasEnd()).isFalse(); } @Test public void equalsTest() { TimeRange range1 = new TimeRange(start, end); TimeRange range2 = new TimeRange(start, end); TimeRange range3 = new TimeRange(start.plusMillis(-1), end.plusMillis(1)); TimeRange range4 = new TimeRange(start, end, true); assertThat(range1).isEqualTo(range2); assertThat(range1).isNotEqualTo(range3); assertThat(range2).isEqualTo(range1); assertThat(range2).isNotEqualTo(range3); assertThat(range1).isNotEqualTo(range4); } }