/*
* 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.TimeBlock;
import kr.debop4j.timeperiod.test.samples.TimeBlockPeriodRelationTestData;
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.TimeBlockTest
*
* @author 배성혁 sunghyouk.bae@gmail.com
* @since 13. 5. 18. 오후 11:22
*/
@Slf4j
public class TimeBlockTest {
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 TimeBlockPeriodRelationTestData testData = new TimeBlockPeriodRelationTestData(start, end, offset);
@Test
public void anytimeTest() throws Exception {
assertThat(TimeBlock.Anytime.getStart()).isEqualTo(TimeSpec.MinPeriodTime);
assertThat(TimeBlock.Anytime.getEnd()).isEqualTo(TimeSpec.MaxPeriodTime);
assertThat(TimeBlock.Anytime.isAnytime()).isTrue();
assertThat(TimeBlock.Anytime.isReadonly()).isTrue();
assertThat(TimeBlock.Anytime.hasPeriod()).isFalse();
assertThat(TimeBlock.Anytime.hasStart()).isFalse();
assertThat(TimeBlock.Anytime.hasEnd()).isFalse();
assertThat(TimeBlock.Anytime.isMoment()).isFalse();
}
@Test
public void defaultContructorTest() throws Exception {
TimeBlock block = new TimeBlock();
assertThat(block).isNotEqualTo(TimeBlock.Anytime);
assertThat(Times.getRelation(block, TimeBlock.Anytime)).isEqualTo(PeriodRelation.ExactMatch);
assertThat(block.isAnytime()).isTrue();
assertThat(block.isReadonly()).isFalse();
assertThat(block.hasPeriod()).isFalse();
assertThat(block.hasStart()).isFalse();
assertThat(block.hasEnd()).isFalse();
assertThat(block.isMoment()).isFalse();
}
@Test
public void momentTest() throws Exception {
DateTime moment = Times.now();
TimeBlock block = new TimeBlock(moment);
assertThat(block.hasStart()).isTrue();
assertThat(block.hasEnd()).isTrue();
assertThat(block.getDuration()).isEqualTo(TimeSpec.MinDuration);
assertThat(block.isAnytime()).isFalse();
assertThat(block.isMoment()).isTrue();
assertThat(block.hasPeriod()).isTrue();
}
@Test
public void momentByPeriod() {
TimeBlock block = new TimeBlock(Times.now(), Duration.ZERO);
assertThat(block.isMoment()).isTrue();
}
@Test
public void nonMomentTest() {
TimeBlock block = new TimeBlock(Times.now(), TimeSpec.MinPositiveDuration);
assertThat(block.isMoment()).isFalse();
assertThat(block.getDuration()).isEqualTo(TimeSpec.MinPositiveDuration);
}
@Test
public void hasStartTest() {
// 현재부터 ~
TimeBlock block = new TimeBlock(Times.now(), (DateTime) null);
assertThat(block.hasStart()).isTrue();
assertThat(block.hasEnd()).isFalse();
}
@Test
public void hasEndTest() {
// ~ 현재까지
TimeBlock range = new TimeBlock((DateTime) null, Times.now());
assertThat(range.hasStart()).isFalse();
assertThat(range.hasEnd()).isTrue();
}
@Test
public void startEndTest() {
TimeBlock range = new TimeBlock(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() {
TimeBlock range = new TimeBlock(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() {
TimeBlock range = new TimeBlock(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(expected = AssertionError.class)
public void startAndNegateDurationTest() {
TimeBlock block = new TimeBlock(start, Durations.negate(duration));
}
@Test
public void copyConstructorTest() {
TimeBlock source = new TimeBlock(start, start.plusHours(1), true);
TimeBlock copy = new TimeBlock(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() {
TimeBlock block = new TimeBlock(start, start.plusHours(1));
assertThat(block.getStart()).isEqualTo(start);
assertThat(block.getDuration().getStandardHours()).isEqualTo(1);
DateTime chanedStart = start.plusHours(1);
block.setStart(chanedStart);
assertThat(block.getStart()).isEqualTo(chanedStart);
}
@Test(expected = AssertionError.class)
public void startReadonlyTest() {
TimeBlock block = new TimeBlock(Times.now(), Durations.hours(1), true);
block.setStart(block.getStart().minusHours(1));
}
@Test
public void endTest() throws Exception {
TimeBlock block = new TimeBlock(end.minusHours(1), end);
assertThat(block.getEnd()).isEqualTo(end);
DateTime changedEnd = end.plusHours(1);
block.setEnd(changedEnd);
assertThat(block.getEnd()).isEqualTo(changedEnd);
}
@Test(expected = AssertionError.class)
public void endReadonlyTest() {
TimeBlock range = new TimeBlock(Times.now(), Durations.hours(1), true);
range.setEnd(range.getEnd().plusHours(1));
}
@Test
public void durationTest() {
TimeBlock block = new TimeBlock(start, duration);
assertThat(block.getStart()).isEqualTo(start);
assertThat(block.getEnd()).isEqualTo(end);
assertThat(block.getDuration()).isEqualTo(duration);
Duration delta = Durations.hours(1);
Duration newDuration = block.getDuration().plus(delta);
block.setDuration(newDuration);
assertThat(block.getStart()).isEqualTo(start);
assertThat(block.getEnd()).isEqualTo(end.plus(delta));
assertThat(block.getDuration()).isEqualTo(newDuration);
block.setDuration(TimeSpec.MinDuration);
assertThat(block.getDuration()).isEqualTo(TimeSpec.MinDuration);
}
@Test(expected = AssertionError.class)
public void durationOutOfRangeTest() {
TimeBlock block = new TimeBlock(start, duration);
block.setDuration(Durations.negate(Durations.millis(1)));
}
@Test
public void durationFromStartTest() {
TimeBlock block = new TimeBlock(start, duration);
assertThat(block.getStart()).isEqualTo(start);
assertThat(block.getEnd()).isEqualTo(end);
assertThat(block.getDuration()).isEqualTo(duration);
Duration delta = Durations.hours(1);
Duration newDuration = block.getDuration().plus(delta);
block.durationFromStart(newDuration);
assertThat(block.getStart()).isEqualTo(start);
assertThat(block.getEnd()).isEqualTo(end.plus(delta));
assertThat(block.getDuration()).isEqualTo(newDuration);
block.setDuration(TimeSpec.MinDuration);
assertThat(block.getDuration()).isEqualTo(TimeSpec.MinDuration);
}
@Test
public void durationFromEndTest() {
TimeBlock block = new TimeBlock(start, duration);
assertThat(block.getStart()).isEqualTo(start);
assertThat(block.getEnd()).isEqualTo(end);
assertThat(block.getDuration()).isEqualTo(duration);
Duration delta = Durations.hours(1);
Duration newDuration = block.getDuration().plus(delta);
block.durationFromEnd(newDuration);
assertThat(block.getStart()).isEqualTo(start.minus(delta));
assertThat(block.getEnd()).isEqualTo(end);
assertThat(block.getDuration()).isEqualTo(newDuration);
block.setDuration(TimeSpec.MinDuration);
assertThat(block.getDuration()).isEqualTo(TimeSpec.MinDuration);
}
@Test
public void hasInsideDateTimeTest() {
TimeBlock range = new TimeBlock(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() {
TimeBlock range = new TimeBlock(start, duration);
assertThat(range.getEnd()).isEqualTo(end);
// before
TimeBlock before1 = new TimeBlock(start.minusHours(2), start.minusHours(1));
TimeBlock before2 = new TimeBlock(start.minusMillis(1), end);
TimeBlock before3 = new TimeBlock(start.minusMillis(1), start);
assertThat(range.hasInside(before1)).isFalse();
assertThat(range.hasInside(before2)).isFalse();
assertThat(range.hasInside(before3)).isFalse();
// after
TimeBlock after1 = new TimeBlock(start.plusHours(1), end.plusHours(1));
TimeBlock after2 = new TimeBlock(start, end.plusMillis(1));
TimeBlock after3 = new TimeBlock(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();
TimeBlock inside1 = new TimeBlock(start.plusMillis(1), end);
TimeBlock inside2 = new TimeBlock(start.plusMillis(1), end.minusMillis(1));
TimeBlock inside3 = new TimeBlock(start, end.minusMillis(1));
assertThat(range.hasInside(inside1)).isTrue();
assertThat(range.hasInside(inside2)).isTrue();
assertThat(range.hasInside(inside3)).isTrue();
}
@Test
public void copyTest() {
TimeBlock readonlyTimeBlock = new TimeBlock(start, duration);
assertThat(readonlyTimeBlock.copy()).isEqualTo(readonlyTimeBlock);
assertThat(readonlyTimeBlock.copy(Duration.ZERO)).isEqualTo(readonlyTimeBlock);
TimeBlock range = new TimeBlock(start, end);
assertThat(range.getStart()).isEqualTo(start);
assertThat(range.getEnd()).isEqualTo(end);
TimeBlock 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);
TimeBlock 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);
TimeBlock 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() {
TimeBlock moveZero = new TimeBlock(start, end);
moveZero.move(Durations.Zero);
assertThat(moveZero.getStart()).isEqualTo(start);
assertThat(moveZero.getEnd()).isEqualTo(end);
assertThat(moveZero.getDuration()).isEqualTo(duration);
TimeBlock forward = new TimeBlock(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);
TimeBlock backward = new TimeBlock(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 isSamePeriodTest() {
TimeBlock range1 = new TimeBlock(start, end);
TimeBlock range2 = new TimeBlock(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(TimeBlock.Anytime)).isFalse();
assertThat(range2.isSamePeriod(TimeBlock.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() {
TimeBlock range = new TimeBlock(start, end);
// before
assertThat(range.intersectsWith(new TimeBlock(start.minusHours(2), start.minusHours(1)))).isFalse();
assertThat(range.intersectsWith(new TimeBlock(start.minusHours(1), start))).isTrue();
assertThat(range.intersectsWith(new TimeBlock(start.minusHours(1), start.plusMillis(1)))).isTrue();
// after
assertThat(range.intersectsWith(new TimeBlock(end.plusHours(1), end.plusHours(2)))).isFalse();
assertThat(range.intersectsWith(new TimeBlock(end, end.plusMillis(1)))).isTrue();
assertThat(range.intersectsWith(new TimeBlock(end.minusMillis(1), end.plusMillis(1)))).isTrue();
// intersect
assertThat(range.intersectsWith(range)).isTrue();
assertThat(range.intersectsWith(new TimeBlock(start.minusMillis(1), end.plusHours(2)))).isTrue();
assertThat(range.intersectsWith(new TimeBlock(start.minusMillis(1), start.plusMillis(1)))).isTrue();
assertThat(range.intersectsWith(new TimeBlock(end.minusMillis(1), end.plusMillis(1)))).isTrue();
}
@Test
public void getIntersectionTest() {
TimeBlock range = new TimeBlock(start, end);
// before
assertThat(range.getIntersection(new TimeBlock(start.minusHours(2), start.minusHours(1)))).isNull();
assertThat(range.getIntersection(new TimeBlock(start.minusMillis(1), start))).isEqualTo(new TimeBlock(start));
assertThat(range.getIntersection(new TimeBlock(start.minusHours(1), start.plusMillis(1)))).isEqualTo(new TimeBlock(start, start.plusMillis(1)));
// after
assertThat(range.getIntersection(new TimeBlock(end.plusHours(1), end.plusHours(2)))).isNull();
assertThat(range.getIntersection(new TimeBlock(end, end.plusMillis(1)))).isEqualTo(new TimeBlock(end));
assertThat(range.getIntersection(new TimeBlock(end.minusMillis(1), end.plusMillis(1)))).isEqualTo(new TimeBlock(end.minusMillis(1), end));
// intersect
assertThat(range.getIntersection(range)).isEqualTo(range);
assertThat(range.getIntersection(new TimeBlock(start.minusMillis(1), end.plusMillis(1)))).isEqualTo(range);
assertThat(range.getIntersection(new TimeBlock(start.plusMillis(1), end.minusMillis(1)))).isEqualTo(new TimeBlock(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() {
TimeBlock range = new TimeBlock(start, duration);
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() {
TimeBlock range1 = new TimeBlock(start, end);
TimeBlock range2 = new TimeBlock(start, end);
TimeBlock range3 = new TimeBlock(start.plusMillis(-1), end.plusMillis(1));
TimeBlock range4 = new TimeBlock(start, end, true);
assertThat(range1).isEqualTo(range2);
assertThat(range1).isNotEqualTo(range3);
assertThat(range2).isEqualTo(range1);
assertThat(range2).isNotEqualTo(range3);
assertThat(range1).isNotEqualTo(range4);
}
}