package com.github.liblevenshtein.assertion; import org.assertj.core.api.AbstractAssert; import com.github.liblevenshtein.distance.IDistance; import com.github.liblevenshtein.transducer.Candidate; /** * AssertJ-style assertions for {@link Candidate}s. */ public class CandidateAssertions extends AbstractAssert<CandidateAssertions, Candidate> { /** * Constructs a new {@link Candidate} to assert-against. * @param actual {@link Candidate} to assert-against. */ public CandidateAssertions(final Candidate actual) { super(actual, CandidateAssertions.class); } /** * Builds a new {@link Candidate} to assert-against. * @param actual {@link Candidate} to assert-against. * @return A new {@link Candidate} to assert-against. */ public static CandidateAssertions assertThat(final Candidate actual) { return new CandidateAssertions(actual); } /** * Asserts that the actual distance is the expected distance from the query * term, as specified by the distance function. * @param distance Distance function for validation. * @param queryTerm Term whose distance from the spelling candidate is to be * determined. * @return This {@link CandidateAssertions} for fluency. * @throws AssertionError When the actual distance differs from what's * expected. */ public CandidateAssertions hasDistance( final IDistance<String> distance, final String queryTerm) { isNotNull(); final int expectedDistance = distance.between(queryTerm, actual.term()); if (expectedDistance != actual.distance()) { failWithMessage( "Expected d(%s, %s) = [%d], but was [%d]", queryTerm, actual.term(), expectedDistance, actual.distance()); } return this; } }