package com.github.liblevenshtein.assertion;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import com.github.liblevenshtein.transducer.Position;
import com.github.liblevenshtein.transducer.SubsumesFunction;
import static com.github.liblevenshtein.assertion.SubsumesFunctionAssertions.assertThat;
public class SubsumesFunctionAssertionsTest {
private static final int TERM_LENGTH = 4;
private final ThreadLocal<SubsumesFunction> standardSubsumes = new ThreadLocal<>();
private final ThreadLocal<SubsumesFunction> specialSubsumes = new ThreadLocal<>();
private final ThreadLocal<Position> lhs = new ThreadLocal<>();
private final ThreadLocal<Position> rhs = new ThreadLocal<>();
@BeforeMethod
public void setUp() {
standardSubsumes.set(mock(SubsumesFunction.class));
specialSubsumes.set(mock(SubsumesFunction.class));
lhs.set(mock(Position.class));
rhs.set(mock(Position.class));
}
@Test
public void testForStandardAlgorithm() {
when(standardSubsumes.get().at(rhs.get(), rhs.get(), TERM_LENGTH))
.thenReturn(true);
when(standardSubsumes.get().at(lhs.get(), rhs.get(), TERM_LENGTH))
.thenReturn(false);
assertThat(standardSubsumes.get())
.subsumesAt(rhs.get(), rhs.get(), TERM_LENGTH, true);
assertThat(standardSubsumes.get())
.subsumesAt(lhs.get(), rhs.get(), TERM_LENGTH, false);
}
@Test(expectedExceptions = AssertionError.class)
public void testForStandardAlgorithmAgainstTrueViolation() {
when(standardSubsumes.get().at(lhs.get(), rhs.get(), TERM_LENGTH))
.thenReturn(false);
assertThat(standardSubsumes.get())
.subsumesAt(lhs.get(), rhs.get(), TERM_LENGTH, true);
}
@Test(expectedExceptions = AssertionError.class)
public void testForStandardAlgorithmAgainstFalseViolation() {
when(standardSubsumes.get().at(lhs.get(), rhs.get(), TERM_LENGTH))
.thenReturn(true);
assertThat(standardSubsumes.get())
.subsumesAt(lhs.get(), rhs.get(), TERM_LENGTH, false);
}
@Test
public void testForSpecialSubsumes() {
when(specialSubsumes.get().at(rhs.get(), rhs.get(), TERM_LENGTH))
.thenReturn(true);
when(specialSubsumes.get().at(lhs.get(), rhs.get(), TERM_LENGTH))
.thenReturn(false);
assertThat(specialSubsumes.get())
.subsumesAt(rhs.get(), rhs.get(), TERM_LENGTH, true);
assertThat(specialSubsumes.get())
.subsumesAt(lhs.get(), rhs.get(), TERM_LENGTH, false);
}
@Test(expectedExceptions = AssertionError.class)
public void testForSpecialSubsumesAgainstTrueViolation() {
when(specialSubsumes.get().at(lhs.get(), rhs.get(), TERM_LENGTH))
.thenReturn(false);
assertThat(specialSubsumes.get())
.subsumesAt(lhs.get(), rhs.get(), TERM_LENGTH, true);
}
@Test(expectedExceptions = AssertionError.class)
public void testForSpecialSubsumesAgainstFalseViolation() {
when(specialSubsumes.get().at(lhs.get(), rhs.get(), TERM_LENGTH))
.thenReturn(true);
assertThat(specialSubsumes.get())
.subsumesAt(lhs.get(), rhs.get(), TERM_LENGTH, false);
}
}