package ngenes2.evolver.stop;
import ngenes2.population.Population;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
public abstract class StopConditionContractTesst {
private StopCondition stopCondition;
private StopCondition mockTrue;
private StopCondition mockFalse;
private int generation;
private Population population;
protected abstract StopCondition getStopCondition();
protected abstract int getStoppingGeneration();
protected abstract Population getStoppingPopulation();
@Before
public final void whenTestingStopConditionContract() {
stopCondition = getStopCondition();
mockTrue = mock(StopCondition.class);
mockFalse = mock(StopCondition.class);
when( mockTrue.shouldStop(anyInt(), any(Population.class))).thenReturn(Boolean.TRUE);
when( mockFalse.shouldStop(anyInt(), any(Population.class))).thenReturn(Boolean.FALSE);
generation = getStoppingGeneration();
population = getStoppingPopulation();
}
@Test
public void testAnd() {
assertTrue( stopCondition.shouldStop(generation, population) );
final StopCondition and = stopCondition.and(mockTrue);
assertEquals(true, and.shouldStop(generation,population));
final StopCondition and2 = stopCondition.and(mockFalse);
assertEquals(false, and2.shouldStop(generation,population));
}
@Test
public void testOr() {
assertTrue( stopCondition.shouldStop(generation, population) );
final StopCondition or = stopCondition.or(mockTrue);
assertEquals(true, or.shouldStop(generation,population));
final StopCondition or2 = stopCondition.or(mockFalse);
assertEquals(true, or2.shouldStop(generation,population));
}
}