package com.github.liblevenshtein.assertion;
import java.util.Arrays;
import org.assertj.core.api.AbstractAssert;
import com.github.liblevenshtein.transducer.State;
import com.github.liblevenshtein.transducer.StateTransitionFunction;
/**
* AssertJ-style assertions for {@link StateTransitionFunction}.
*/
public class StateTransitionFunctionAssertions
extends AbstractAssert<StateTransitionFunctionAssertions, StateTransitionFunction> {
/**
* Constructs a new {@link StateTransitionFunctionAssertions} to
* assert-against.
* @param actual {@link StateTransitionFunction} to assert-against.
*/
public StateTransitionFunctionAssertions(final StateTransitionFunction actual) {
super(actual, StateTransitionFunctionAssertions.class);
}
/**
* Constructs a new {@link StateTransitionFunctionAssertions} to
* assert-against.
* @param actual {@link StateTransitionFunction} to assert-against.
* @return A new {@link StateTransitionFunctionAssertions} to
* assert-against.
*/
public static StateTransitionFunctionAssertions assertThat(
final StateTransitionFunction actual) {
return new StateTransitionFunctionAssertions(actual);
}
/**
* Asserts that the transition of the input is expected.
* @param expectedState Expected transition of the input.
* @param input First parameter for the transition.
* @param characteristicVector Second parameter of the transition.
* @return This {@link StateTransitionFunctionAssertions} for fluency.
* @throws AssertionError When the actual transition is unexpected.
*/
public StateTransitionFunctionAssertions transitionsTo(
final State expectedState,
final State input,
final boolean[] characteristicVector) {
isNotNull();
final State actualState = actual.of(input, characteristicVector);
if (null == expectedState && null != actualState
|| null != expectedState && !expectedState.equals(actualState)) {
failWithMessage(
"Expected StateTransitionFunction#of(%s, [%s]) to be [%s], but was [%s]",
input, Arrays.toString(characteristicVector), expectedState, actualState);
}
return this;
}
}