package com.github.liblevenshtein.assertion; import java.util.Iterator; import com.github.liblevenshtein.transducer.Position; import com.github.liblevenshtein.transducer.StateIterator; /** * AssertJ-style assertions for {@link StateIterator}. */ public class StateIteratorAssertions extends IteratorAssertions<Position> { /** * Constructs a new {@link StateIteratorAssertions} to assert-against. * @param actual {@link StateIterator} to assert-against. */ public StateIteratorAssertions(final StateIterator actual) { super(actual); } /** * Constructs a new {@link StateIteratorAssertions} to assert-against. * @param actual {@link StateIterator} to assert-against. * @return A new {@link StateIteratorAssertions} to assert-against. */ public static StateIteratorAssertions assertThat(final StateIterator actual) { return new StateIteratorAssertions(actual); } /** * {@inheritDoc} */ @Override public StateIteratorAssertions hasNext() { super.hasNext(); return this; } /** * {@inheritDoc} */ @Override public StateIteratorAssertions hasNext(final Position expectedValue) { super.hasNext(expectedValue); return this; } /** * {@inheritDoc} */ @Override public StateIteratorAssertions doesNotHaveNext() { super.doesNotHaveNext(); return this; } /** * {@inheritDoc} */ @Override public StateIteratorAssertions isEqualTo(final Iterator<Position> expected) { super.isEqualTo(expected); return this; } /** * Verifies that the iterator returns the expected {@link Position} from * {@link StateIterator#peek()}. * @param expectedElement {@link Position} expected to be returned from * {@link StateIterator#peek()}. * @return This {@link StateIteratorAssertions} for fluency. * @throws AssertionError When the actual element returned from * {@link StateIterator#peek()} is not the expected one. */ public StateIteratorAssertions peeks(final Position expectedElement) { isNotNull(); final Position actualElement = ((StateIterator) actual).peek(); if (null == expectedElement) { if (null != actualElement) { failWithMessage("Expected actual.peek() to be [null], but was [%s]", actualElement); } } else if (!expectedElement.equals(actualElement)) { failWithMessage("Expected actual.peek() to be [%s], but was [%s]", expectedElement, actualElement); } return this; } /** * Removes an element from the {@link #actual} iterator. This method calls * {@link StateIterator#remove()}. * @return This {@link StateIteratorAssertions} for fluency. */ public StateIteratorAssertions remove() { isNotNull(); actual.remove(); return this; } /** * Returns a new {@link StateIteratorAssertions} around a copy of the * {@link #actual} iterator. * @return A new {@link StateIteratorAssertions} to assert-against. */ public StateIteratorAssertions copy() { isNotNull(); return new StateIteratorAssertions(((StateIterator) actual).copy()); } /** * Inserts a {@link Position} into the {@link #actual} iterator. * @param position {@link Position} to insert into the {@link #actual} * iterator. * @return This {@link StateIteratorAssertions} for fluency. */ public StateIteratorAssertions insert(final Position position) { isNotNull(); ((StateIterator) actual).insert(position); return this; } }