package rabbitescape.engine.solution; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.*; import org.junit.*; import rabbitescape.engine.Token; import rabbitescape.engine.World; public class TestSolutionCommand { @Test public void Equal_solution_commands_are_equal() { SolutionCommand solution1 = makeSolutionCommand(); SolutionCommand solution2 = makeSolutionCommand(); assertThat( solution1, equalTo( solution2 ) ); assertThat( solution1.hashCode(), equalTo( solution2.hashCode() ) ); } @Test public void Equality_in_wait_commands() { SolutionCommand waitA = new SolutionCommand( new WaitAction( 4 )); SolutionCommand waitB = new SolutionCommand( new WaitAction( 4 )); assertThat( waitA, equalTo( waitB ) ); } @Test public void Inequality_in_wait_commands() { SolutionCommand waitA = new SolutionCommand( new WaitAction( 4 )); SolutionCommand waitB = new SolutionCommand( new WaitAction( 5 )); assertThat( waitA, not( equalTo( waitB ) ) ); } @Test public void Different_action_lists_make_them_unequal() { SolutionCommand solution1 = makeSolutionCommand(); SolutionCommand solution2 = makeShortSolutionCommand(); assertThat( solution1, not( equalTo( solution2 ) ) ); // Note: technically a correct hashCode could fail this, but it's // desirable that in most cases it won't. assertThat( solution1.hashCode(), not( equalTo( solution2.hashCode() ) ) ); } @Test public void Different_actions_make_them_unequal() { SolutionCommand solution1 = makeSolutionCommand( 2, 3 ); SolutionCommand solution2 = makeSolutionCommand( 3, 2 ); assertThat( solution1, not( equalTo( solution2 ) ) ); // Note: technically a correct hashCode could fail this, but it's // desirable that in most cases it won't. assertThat( solution1.hashCode(), not( equalTo( solution2.hashCode() ) ) ); } // --- private static SolutionCommand makeSolutionCommand() { return makeSolutionCommand( 3, 2 ); } private static SolutionCommand makeSolutionCommand( int placeX, int placeY ) { return new SolutionCommand( new PlaceTokenAction( placeX, placeY ) , new SelectAction( Token.Type.block ) , new AssertStateAction( World.CompletionState.RUNNING ) ); } private static SolutionCommand makeShortSolutionCommand() { return new SolutionCommand( new PlaceTokenAction( 3, 2 ) , new SelectAction( Token.Type.block ) ); } }