package rabbitescape.engine.logic; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.CoreMatchers.*; import static rabbitescape.engine.Tools.*; import static rabbitescape.engine.textworld.TextWorldManip.*; import static rabbitescape.engine.util.WorldAssertions.*; import org.junit.*; import rabbitescape.engine.World; public class TestWalking { @Test public void Take_a_step_right_on_normal_ground() { World world = createWorld( " ", " ", " r ", "#####" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " ", " ", " r ", "#####" ) ); } @Test public void Take_a_step_left_on_normal_ground() { World world = createWorld( " ", " ", " j ", "#####" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " ", " ", " j ", "#####" ) ); } @Test public void Turn_when_you_hit_a_wall_on_left() { World world = createWorld( "#j ", "#####" ); assertThat( renderWorld( world, true, false ), equalTo( "#| ", "#####" ) ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( "#r ", "#####" ) ); } @Test public void Turn_when_you_hit_a_wall_on_right() { World world = createWorld( "# r# ", "#####" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( "# j# ", "#####" ) ); } @Test public void Turn_when_you_hit_the_back_of_a_slope_on_left() { World world = createWorld( "/j ", "####" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( "/r ", "####" ) ); } @Test public void Dont_turn_when_you_hit_the_back_of_a_bridge_on_left() { World world = createWorld( " (j ", "#####" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " j ", "#####" ) ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( "j( ", "#####" ) ); } @Test public void Turn_when_you_hit_the_back_of_a_slope_on_right() { World world = createWorld( " r\\", "####" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " j\\", "####" ) ); } @Test public void Dont_turn_when_you_hit_the_back_of_a_slope_on_right() { World world = createWorld( " r) ", "#####" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " r ", "#####" ) ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " )r", "#####" ) ); } @Test public void Climb_up_a_slope_right() { World world = createWorld( " ", " /##", "r /###", "######" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " /##", " r~###", // Approaching "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " $##", " r###", // Going up slope "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ' ", " r##", " /###", // Approaching end "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " r>", // At top " /##", " /###", "######" ) ); } @Test public void Climb_up_a_bridge_right() { World world = createWorld( " ", " (##", "r (###", "######" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " (##", " r~###", // Approaching "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " $##", " r###", // Going up slope "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ' ", " r##", " (###", // Approaching end "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " r>", // At top " (##", " (###", "######" ) ); } @Test public void Climb_up_a_slope_left() { World world = createWorld( " ", "##\\ ", "###\\ j", "######" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "##\\ ", "###`j ", // Approaching "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "##^ ", "###j ", // Going up slope "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ! ", "##j ", "###\\ ", // Approaching top "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "<j ", // At top "##\\ ", "###\\ ", "######" ) ); } @Test public void Climb_up_a_bridge_left() { World world = createWorld( " ", "##) ", "###) j", "######" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "##) ", "###`j ", // Approaching "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "##^ ", "###j ", // Going up slope "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ! ", "##j ", "###) ", // Approaching top "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "<j ", // At top "##) ", "###) ", "######" ) ); } @Test public void Climb_down_a_slope_right() { World world = createWorld( "r ", "##\\ ", "###\\ ", "######" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " r ", "##- ", // Approaching "###\\ ", "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "##r ", // Going down slope "###@ ", "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "##\\ ", // Approaching bottom "###r_ ", "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "##\\ ", "###\\r>", // At bottom "######" ) ); } @Test public void Climb_bridge_a_slope_right() { World world = createWorld( "r ", "##) ", "###) ", "######" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " r ", "##- ", // Approaching "###) ", "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "##r ", // Going down slope "###@ ", "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "##) ", // Approaching bottom "###r_ ", "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "##) ", "###)r>", // At bottom "######" ) ); } @Test public void Climb_down_a_slope_left() { World world = createWorld( " j", " /##", " /###", "######" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " j ", " =##", // Approaching " /###", "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " j##", // Going down slope " %###", "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " /##", // Approaching bottom " +j###", "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " /##", "<j/###", // At bottom "######" ) ); } @Test public void Climb_down_a_bridge_left() { World world = createWorld( " j", " (##", " (###", "######" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " j ", " =##", // Approaching " (###", "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " j##", // Going down slope " %###", "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " (##", // Approaching bottom " +j###", "######" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " (##", "<j(###", // At bottom "######" ) ); } @Test public void Turn_on_a_slope_up_right() { World world = createWorld( " #", "r /#", "####" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " #", " r~#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " #", " ?#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " #", " +j#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " #", "<j/#", "####" ) ); } @Test public void Turn_on_a_bridge_up_right() { World world = createWorld( " #", "r (#", "####" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " #", " r~#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " #", " ?#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " #", " +j#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " #", "<j(#", "####" ) ); } @Test public void Turn_because_of_backslope_on_a_slope_up_right() { World world = createWorld( " \\", " r/#", "####" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " \\", " r#", "####" ) ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " \\", " j#", "####" ) ); } @Test public void Dont_turn_because_of_backbridge_on_a_slope_up_right() { World world = createWorld( " ) ", " r/##", "#####" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " ) ", " r##", "#####" ) ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " r ", " /##", "#####" ) ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " )r", " /##", "#####" ) ); } @Test public void Turn_on_a_slope_up_left() { World world = createWorld( "# ", "#\\ j", "####" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "# ", "#`j ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "# ", "#| ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "# ", "#r_ ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "# ", "#\\r>", "####" ) ); } @Test public void Turn_on_a_bridge_up_left() { World world = createWorld( "# ", "#) j", "####" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "# ", "#`j ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "# ", "#| ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "# ", "#r_ ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "# ", "#)r>", "####" ) ); } @Test public void Turn_because_of_backslope_on_a_slope_up_left() { World world = createWorld( "/ ", "#\\j ", "####" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( "/ ", "#j ", "####" ) ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( "/ ", "#r ", "####" ) ); } @Test public void Dont_turn_because_of_backbridge_on_a_slope_up_left() { World world = createWorld( " ( ", "##\\j ", "#####" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " ( ", "##j ", "#####" ) ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " j ", "##\\ ", "#####" ) ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( "j( ", "##\\ ", "#####" ) ); } @Test public void Turn_on_a_slope_down_right() { World world = createWorld( " r ", "##\\#", "###\\" ); assertThat( renderWorld( world, true, false ), equalTo( " r ", "##-#", "###\\" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "##]#", "###\\" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ! ", "##j#", "###\\" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "<j ", "##\\#", "###\\" ) ); } @Test public void Turn_on_a_bridge_down_right() { World world = createWorld( " r ", "##)#", "###)" ); assertThat( renderWorld( world, true, false ), equalTo( " r ", "##-#", "###)" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "##]#", "###)" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ! ", "##j#", "###)" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "<j ", "##)#", "###)" ) ); } @Test public void Turn_because_of_backslope_on_a_slope_down_right() { World world = createWorld( " r ", "##\\\\", "###\\" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " ", "##r\\", "###\\" ) ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " ", "##j\\", "###\\" ) ); } @Test public void Turn_on_a_slope_down_left() { World world = createWorld( " j ", "#/##", "/###" ); assertThat( renderWorld( world, true, false ), equalTo( " j ", "#=##", "/###" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "#[##", "/###" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ' ", "#r##", "/###" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " r>", "#/##", "/###" ) ); } @Test public void Turn_on_a_bridge_down_left() { World world = createWorld( " j ", "#(##", "(###" ); assertThat( renderWorld( world, true, false ), equalTo( " j ", "#=##", "(###" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "#[##", "(###" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ' ", "#r##", "(###" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " r>", "#(##", "(###" ) ); } @Test public void Turn_because_of_blackslope_on_a_slope_down_left() { World world = createWorld( " j ", "//##", "/###" ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " ", "/j##", "/###" ) ); world.step(); assertThat( renderWorld( world, false, false ), equalTo( " ", "/r##", "/###" ) ); } @Test public void Slope_down_then_immediately_up_right() { World world = createWorld( "r ", "#\\/#", "####" ); assertThat( renderWorld( world, true, false ), equalTo( "r ", "#-/#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "#r,#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " '", "#\\r#", "####" ) ); } @Test public void Bridge_down_then_immediately_up_right() { World world = createWorld( "r ", "#)(#", "####" ); assertThat( renderWorld( world, true, false ), equalTo( "r ", "#-(#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "#r,#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " '", "#)r#", "####" ) ); } @Test public void Slope_down_then_immediately_up_left() { World world = createWorld( " j", "#\\/#", "####" ); assertThat( renderWorld( world, true, false ), equalTo( " j", "#\\=#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "#.j#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "! ", "#j/#", "####" ) ); } @Test public void Bridge_down_then_immediately_up_left() { World world = createWorld( " j", "#)(#", "####" ); assertThat( renderWorld( world, true, false ), equalTo( " j", "#)=#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "#.j#", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "! ", "#j(#", "####" ) ); } @Test public void Slope_up_then_immediately_down_right() { World world = createWorld( " ", "r/\\ ", "####" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " r& ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " /r_", "####" ) ); } @Test public void Bridge_up_then_immediately_down_right() { World world = createWorld( " ", "r() ", "####" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " r& ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " (r_", "####" ) ); } @Test public void Slope_up_then_immediately_down_left() { World world = createWorld( " ", " /\\j", "####" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " mj ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "+j\\ ", "####" ) ); } @Test public void Bridge_up_then_immediately_down_left() { World world = createWorld( " ", " ()j", "####" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", " mj ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " ", "+j) ", "####" ) ); } @Test public void Slope_up_right_nothing_under() { World world = createWorld( " /", " / ", "r/ ", "####" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " /", " $ ", " r ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " $", " r ", " / ", "####" ) ); } @Test public void Bridge_up_right_nothing_under() { World world = createWorld( " (", " ( ", "r( ", "####" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " (", " $ ", " r ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " $", " r ", " ( ", "####" ) ); } @Test public void Slope_up_left_nothing_under() { World world = createWorld( "\\ ", " \\ ", " \\j", "####" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "\\ ", " ^ ", " j ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "^ ", " j ", " \\ ", "####" ) ); } @Test public void Bridge_up_left_nothing_under() { World world = createWorld( ") ", " ) ", " )j", "####" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( ") ", " ^ ", " j ", "####" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "^ ", " j ", " ) ", "####" ) ); } @Test public void Bridge_up_right_slope_down_right() { World world = createWorld( " (", " ( ", "r( ", "#\\ " ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " (", " $ ", " r ", "#\\ " ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " $", " r ", " ( ", "#\\ " ) ); } @Test public void Bridge_up_left_slope_down_left() { World world = createWorld( ") ", " ) ", " )j", " /#" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( ") ", " ^ ", " j ", " /#" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "^ ", " j ", " ) ", " /#" ) ); } @Test public void Down_then_Bridge_up_right_slope_down_right() { World world = createWorld( " (", "r ( ", "#)( ", "##\\ " ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " (", " ( ", "#r, ", "##\\ " ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " (", " $ ", "#)r ", "##\\ " ) ); } @Test public void Down_then_bridge_up_left_slope_down_left() { World world = createWorld( ") ", " ) j", " )(#", " /##" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( ") ", " ) ", " .j#", " /##" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( ") ", " ^ ", " j(#", " /##" ) ); } @Test public void Mid_bridge_up_right_slope_down_right() { World world = createWorld( " (", " ( ", "r(\\ ", "# " ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " (", " $ ", " r\\ ", "# " ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( " $", " r ", " (\\ ", "# " ) ); } @Test public void Mid_bridge_up_left_slope_down_left() { World world = createWorld( ") ", " ) ", " /)j", " #" ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( ") ", " ^ ", " /j ", " #" ) ); world.step(); assertThat( renderWorld( world, true, false ), equalTo( "^ ", " j ", " /) ", " #" ) ); } @Test public void Walk_below_bridge() { assertWorldEvolvesLike( "# #" + "\n" + "# ( j #" + "\n" + "#########", "# #" + "\n" + "# <j #" + "\n" + "#########", "# #" + "\n" + "#<j #" + "\n" + "#########" ); } @Test public void Walk_below_bridge_lowering() { assertWorldEvolvesLike( "# j #" + "\n" + "# ((## #" + "\n" + "#########", "# j #" + "\n" + "# (=## #" + "\n" + "#########", "# #" + "\n" + "# +j## #" + "\n" + "#########", "# #" + "\n" + "#<j(## #" + "\n" + "#########" ); } @Test public void Walk_below_bridge_rising() { assertWorldEvolvesLike( "# ( #" + "\n" + "###)j ###" + "\n" + "#########", "# ! #" + "\n" + "###j ###" + "\n" + "#########", "#<j #" + "\n" + "###) ###" + "\n" + "#########" ); } @Test public void Fall_below_bridge() { assertWorldEvolvesLike( "# ( j #" + "\n" + "# ## #" + "\n" + "#########", "# <j #" + "\n" + "# ## #" + "\n" + "#########", "# j #" + "\n" + "# f## #" + "\n" + "#########", "# ( #" + "\n" + "#<j## #" + "\n" + "#########" ); } @Test public void Fall_below_bridge_lowering() { assertWorldEvolvesLike( "# j #" + "\n" + "# ((## #" + "\n" + "## ######" + "\n" + "## ######", "# j #" + "\n" + "# (=## #" + "\n" + "## ######" + "\n" + "## ######", "# #" + "\n" + "# +j## #" + "\n" + "## ######" + "\n" + "## ######", "# #" + "\n" + "# j(## #" + "\n" + "##f######" + "\n" + "##f######" ); } @Test public void Fall_below_bridge_rising() { assertWorldEvolvesLike( "# ( #" + "\n" + "## )j ###" + "\n" + "#########", "# ! #" + "\n" + "## j ###" + "\n" + "#########", "# j #" + "\n" + "##f) ###" + "\n" + "#########" ); } @Test public void Get_onto_bridge_by_wall() { assertWorldEvolvesLike( "# #" + "\n" + "# ) #" + "\n" + "# r)#" + "\n" + "#########", "# #" + "\n" + "# ) #" + "\n" + "# ?#" + "\n" + "#########", "# #" + "\n" + "# ^ #" + "\n" + "# j#" + "\n" + "#########", "# ! #" + "\n" + "# j #" + "\n" + "# )#" + "\n" + "#########", "# j #" + "\n" + "# f) #" + "\n" + "# f )#" + "\n" + "#########" ); } @Test public void Walk_out_of_a_hole() { assertWorldEvolvesLike( " " + "\n" + "##(##" + "\n" + "##)##" + "\n" + "#r(##" + "\n" + "#####", " " + "\n" + "##(##" + "\n" + "##)##" + "\n" + "# ?##" + "\n" + "#####", " " + "\n" + "##(##" + "\n" + "##|##" + "\n" + "# (##" + "\n" + "#####", " ' " + "\n" + "##r##" + "\n" + "##)##" + "\n" + "# (##" + "\n" + "#####", " r>" + "\n" + "##(##" + "\n" + "##)##" + "\n" + "# (##" + "\n" + "#####" ); } @Test public void Cant_walk_out_of_a_without_enough_bridges() { assertWorldEvolvesLike( " " + "\n" + "## ##" + "\n" + "##)##" + "\n" + "#r(##" + "\n" + "#####", " " + "\n" + "## ##" + "\n" + "##)##" + "\n" + "# ?##" + "\n" + "#####", " " + "\n" + "## ##" + "\n" + "##|##" + "\n" + "# (##" + "\n" + "#####", " " + "\n" + "## ##" + "\n" + "##]##" + "\n" + "# (##" + "\n" + "#####", " " + "\n" + "## ##" + "\n" + "##|##" + "\n" + "# (##" + "\n" + "#####" ); } @Test public void Bump_head_on_slope_not_past_roof() { String[] lines = { " # # ", "#r/#r(#", "#######" }; World world = createWorld( lines ); for ( int i = 0; i < 2; i++ ) { world.step(); } String[] resultLines = renderCompleteWorld( world, false ); // The rabbits should not be able // to climb the slopes String[] linesBad = { " #r #r", "# /# (#", "#######" }; assertThat( resultLines, not( equalTo( linesBad ) ) ); } @Test public void Bump_head_on_slope_turn() { String[] lines = { " # # # # ", "#\\r/#)r(#", "#########", }; World world = createWorld( lines ); for ( int i = 0; i < 6; i++ ) { world.step(); } String[] resultLines = renderCompleteWorld( world, false ); String[] expected = { " # # # # ", "#\\*/#)*(#", "#########", ":*=r{index:1}", ":*=r{index:2}" }; assertThat( resultLines, equalTo( expected ) ); } @Test public void No_levitation_after_slope_dug_out() { assertWorldEvolvesLike( "#d#" + "\n" + "#*#" + "\n" + "###" + "\n" + "###" + "\n" + ":*=(rr", "# #" + "\n" + "#[#" + "\n" + "###" + "\n" + "###", "# #" + "\n" + "#?#" + "\n" + "#D#" + "\n" + "###", "# #" + "\n" + "#j#" + "\n" + "#f#" + "\n" + "###", "# #" + "\n" + "# #" + "\n" + "#|#" + "\n" + "#D#", "# #" + "\n" + "# #" + "\n" + "#r#" + "\n" + "#f#" ); } }