### Question:
DefaultAnimationPlan implements AnimationPlan { @Override public DefaultAnimationState getInitialState() { return new DefaultAnimationState(0, Direction.FORWARD); } DefaultAnimationPlan(List<? extends TimeSpan> sequence, EndBehavior endBehavior); @Override int calculateDistance(AnimationState from, AnimationState to); @Override DefaultAnimationState determineNextState(AnimationState state); @Override DefaultAnimationState determinePreviousState(AnimationState state); @Override boolean equals(Object obj); @Override @Nullable DefaultAnimationState findState(Date time, Direction direction); @Override DefaultAnimationState findState(TimeSpan span, Direction direction); @Override Duration getAdvanceDuration(); @Override List<? extends TimeSpan> getAnimationSequence(); @Override TimeSpanList getAnimationSequence(AnimationState state, int number, Direction direction); @Override EndBehavior getEndBehavior(); @Override DefaultAnimationState getFinalState(); @Override AnimationState getFinalState(AnimationState state); @Override DefaultAnimationState getInitialState(); @Override Set<? extends TimeSpan> getTimeCoverage(); @Override TimeSpan getTimeSpanForState(AnimationState state); @Override int hashCode(); @Override boolean isEmptyPlan(); @Override boolean isUsingProcessingTimeout(); void setUsingProcessingTimeout(boolean ignoresTimeout); @Override String toString(); @Override TimeSpan getLimitWindow();  }### Answer:
@Test public void testGetInitialState() { List<? extends TimeSpan> sequence = Arrays.asList(TimeSpan.get(0L, 100L), TimeSpan.get(100L, 200L), TimeSpan.get(200L, 300L)); DefaultAnimationPlan plan = new DefaultAnimationPlan(sequence, AnimationPlan.EndBehavior.STOP); Assert.assertEquals(new DefaultAnimationState(0, AnimationState.Direction.FORWARD), plan.getInitialState()); }