package rabbitescape.engine.logic; import static rabbitescape.engine.util.WorldAssertions.*; import org.junit.Test; public class TestClimbing { @Test public void Climb_start_and_end_immediately() { assertWorldEvolvesLike( " " + "\n" + "rc ##" + "\n" + "#####", " " + "\n" + " r>##" + "\n" + "#####", " " + "\n" + " G##" + "\n" + "#####", " L " + "\n" + " r##" + "\n" + "#####", " r>" + "\n" + " ##" + "\n" + "#####" ); } @Test public void Climb_start_continue_end() { assertWorldEvolvesLike( " " + "\n" + " ##" + "\n" + " ##" + "\n" + "rc ##" + "\n" + "#####", " " + "\n" + " ##" + "\n" + " ##" + "\n" + " r>##" + "\n" + "#####", " " + "\n" + " ##" + "\n" + " ##" + "\n" + " G##" + "\n" + "#####", " " + "\n" + " ##" + "\n" + " F##" + "\n" + " r##" + "\n" + "#####", " " + "\n" + " F##" + "\n" + " r##" + "\n" + " ##" + "\n" + "#####", " " + "\n" + " F##" + "\n" + " r##" + "\n" + " ##" + "\n" + "#####", " L " + "\n" + " r##" + "\n" + " ##" + "\n" + " ##" + "\n" + "#####", " r>" + "\n" + " ##" + "\n" + " ##" + "\n" + " ##" + "\n" + "#####" ); } @Test public void Climb_quickly_to_slope() { assertWorldEvolvesLike( " " + "\n" + " / " + "\n" + "rc ##" + "\n" + "#####", " " + "\n" + " / " + "\n" + " r>##" + "\n" + "#####", " " + "\n" + " / " + "\n" + " G##" + "\n" + "#####", " " + "\n" + " L " + "\n" + " r##" + "\n" + "#####", " '" + "\n" + " r " + "\n" + " ##" + "\n" + "#####" ); } @Test public void Climb_eventually_to_slope() { assertWorldEvolvesLike( " " + "\n" + " / " + "\n" + " ##" + "\n" + " ##" + "\n" + "rc ##" + "\n" + "#####", " " + "\n" + " / " + "\n" + " ##" + "\n" + " ##" + "\n" + " r>##" + "\n" + "#####", " " + "\n" + " / " + "\n" + " ##" + "\n" + " ##" + "\n" + " G##" + "\n" + "#####", " " + "\n" + " / " + "\n" + " ##" + "\n" + " F##" + "\n" + " r##" + "\n" + "#####", " " + "\n" + " / " + "\n" + " F##" + "\n" + " r##" + "\n" + " ##" + "\n" + "#####", " " + "\n" + " / " + "\n" + " F##" + "\n" + " r##" + "\n" + " ##" + "\n" + "#####", " " + "\n" + " L " + "\n" + " r##" + "\n" + " ##" + "\n" + " ##" + "\n" + "#####", " '" + "\n" + " r " + "\n" + " ##" + "\n" + " ##" + "\n" + " ##" + "\n" + "#####" ); } @Test public void Climb_starts_from_slope() { assertWorldEvolvesLike( " #" + "\n" + " #" + "\n" + " / " + "\n" + "rc/ #" + "\n" + "#####", " #" + "\n" + " #" + "\n" + " / " + "\n" + " r~ #" + "\n" + "#####", " #" + "\n" + " #" + "\n" + " $ " + "\n" + " r #" + "\n" + "#####", " #" + "\n" + " #" + "\n" + " G " + "\n" + " / #" + "\n" + "#####", " #" + "\n" + " F#" + "\n" + " r " + "\n" + " / #" + "\n" + "#####", " F#" + "\n" + " r#" + "\n" + " / " + "\n" + " / #" + "\n" + "#####" ); } @Test public void Climb_starts_from_bridge() { assertWorldEvolvesLike( " #" + "\n" + " #" + "\n" + " ( " + "\n" + "rc( #" + "\n" + "#####", " #" + "\n" + " #" + "\n" + " ( " + "\n" + " r~ #" + "\n" + "#####", " #" + "\n" + " #" + "\n" + " $ " + "\n" + " r #" + "\n" + "#####", " #" + "\n" + " #" + "\n" + " G " + "\n" + " ( #" + "\n" + "#####", " #" + "\n" + " F#" + "\n" + " r " + "\n" + " ( #" + "\n" + "#####", " F#" + "\n" + " r#" + "\n" + " ( " + "\n" + " ( #" + "\n" + "#####" ); } @Test public void Climb_doesnt_start_when_roof() { assertWorldEvolvesLike( " # " + "\n" + "rc #" + "\n" + "#####", " # " + "\n" + " r> #" + "\n" + "#####", " # " + "\n" + " r>#" + "\n" + "#####", " # " + "\n" + " ?#" + "\n" + "#####" ); } @Test public void Climb_stops_when_roof() { assertWorldEvolvesLike( " # / \\ " + "\n" + " # # #" + "\n" + " # # #" + "\n" + "rc#rc#rc#" + "\n" + "#########", " # / \\ " + "\n" + " # # #" + "\n" + " # # #" + "\n" + " G# G# G#" + "\n" + "#########", " # / \\ " + "\n" + " # # #" + "\n" + " F# F# F#" + "\n" + " r# r# r#" + "\n" + "#########", " # / \\ " + "\n" + " F# F# F#" + "\n" + " r# r# r#" + "\n" + " # # #" + "\n" + "#########", " # / \\ " + "\n" + " F# F# F#" + "\n" + " r# r# r#" + "\n" + " # # #" + "\n" + "#########", " # / \\ " + "\n" + " F# F# F#" + "\n" + " # # #" + "\n" + " # # #" + "\n" + "#########", " # / \\ " + "\n" + " j# j# j#" + "\n" + " f# f# f#" + "\n" + " f# f# f#" + "\n" + "#########" ); } @Test public void Climb_doesnt_start_when_slope_roof() { assertWorldEvolvesLike( " / " + "\n" + "rc #" + "\n" + "#####", " / " + "\n" + " r> #" + "\n" + "#####", " / " + "\n" + " r>#" + "\n" + "#####", " / " + "\n" + " ?#" + "\n" + "#####" ); } @Test public void Climb_does_start_when_bridge_roof() { assertWorldEvolvesLike( " ( " + "\n" + "rc #" + "\n" + "#####", " ( " + "\n" + " r> #" + "\n" + "#####", " ( " + "\n" + " r>#" + "\n" + "#####", " ( " + "\n" + " G#" + "\n" + "#####", " (L" + "\n" + " r#" + "\n" + "#####" ); } @Test public void Climb_starts_straight_after_token() { assertWorldEvolvesLike( " " + "\n" + "rc##" + "\n" + "####", " " + "\n" + " G##" + "\n" + "####", " L " + "\n" + " r##" + "\n" + "####", " r>" + "\n" + " ##" + "\n" + "####" ); } @Test public void Dont_climb_over_bridge() { assertWorldEvolvesLike( " " + "\n" + " (cj " + "\n" + "#####", " " + "\n" + " <j " + "\n" + "#####", " " + "\n" + "<j " + "\n" + "#####" ); } @Test public void Climb_over_slope() { assertWorldEvolvesLike( " " + "\n" + " /cj " + "\n" + "#####", " " + "\n" + " /T " + "\n" + "#####", " U " + "\n" + // Climb over top " /j " + "\n" + "#####", " j " + "\n" + // Fall onto slope " s " + "\n" + "#####", " " + "\n" + "+j " + "\n" + "#####" ); } @Test public void Climb_over_slope_at_top() { assertWorldEvolvesLike( " " + "\n" + " / " + "\n" + " #cj " + "\n" + "#####", " " + "\n" + " / " + "\n" + " #T " + "\n" + "#####", " " + "\n" + " /Y " + "\n" + " #j " + "\n" + "#####", " U " + "\n" + " /j " + "\n" + " # " + "\n" + "#####", " j " + "\n" + " s " + "\n" + " # " + "\n" + "#####", " " + "\n" + "+j " + "\n" + " # " + "\n" + "#####" ); } @Test public void Climb_then_climb_again() { assertWorldEvolvesLike( " " + "\n" + " " + "\n" + " # #" + "\n" + "rc# #" + "\n" + "#####", " " + "\n" + " " + "\n" + " # #" + "\n" + " G# #" + "\n" + "#####", " " + "\n" + " " + "\n" + " F# #" + "\n" + " r# #" + "\n" + "#####", " " + "\n" + " L " + "\n" + " r# #" + "\n" + " # #" + "\n" + "#####", " " + "\n" + " r> " + "\n" + " # #" + "\n" + " # #" + "\n" + "#####", " " + "\n" + " r " + "\n" + " #f#" + "\n" + " #f#" + "\n" + "#####", " " + "\n" + " " + "\n" + " # #" + "\n" + " #G#" + "\n" + "#####", " " + "\n" + " " + "\n" + " #F#" + "\n" + " #r#" + "\n" + "#####", " " + "\n" + " L" + "\n" + " #r#" + "\n" + " # #" + "\n" + "#####" ); } @Test public void Small_climb_then_climb_again() { assertWorldEvolvesLike( " " + "\n" + " " + "\n" + "rc# #" + "\n" + "#####", " " + "\n" + " " + "\n" + " G# #" + "\n" + "#####", " " + "\n" + " L " + "\n" + " r# #" + "\n" + "#####", " " + "\n" + " r> " + "\n" + " # #" + "\n" + "#####", " " + "\n" + " r " + "\n" + " #f#" + "\n" + "#####", " " + "\n" + " " + "\n" + " #G#" + "\n" + "#####", " " + "\n" + " L" + "\n" + " #r#" + "\n" + "#####" ); } @Test public void Cant_pick_up_tokens_when_climbing() { assertWorldEvolvesLike( " # # # #" + "\n" + " # # # #" + "\n" + " b# d# i# k#" + "\n" + " )# )# )# )#" + "\n" + " # # # #" + "\n" + "rc#rc#rc#rc#" + "\n" + "############", " # # # #" + "\n" + " # # # #" + "\n" + " # # # #" + "\n" + " b# d# i# k#" + "\n" + " # # # #" + "\n" + " G# G# G# G#" + "\n" + "############", " # # # #" + "\n" + " # # # #" + "\n" + " # # # #" + "\n" + " b# d# i# k#" + "\n" + " F# F# F# F#" + "\n" + " r# r# r# r#" + "\n" + "############", " # # # #" + "\n" + " # # # #" + "\n" + " # # # #" + "\n" + " F# F# F# F#" + "\n" + " r# r# r# r#" + "\n" + " # # # #" + "\n" + "############", " # # # #" + "\n" + " # # # #" + "\n" + " # # # #" + "\n" + " F# F# F# F#" + "\n" + " r# r# r# r#" + "\n" + " # # # #" + "\n" + "############", " # # # #" + "\n" + " # # # #" + "\n" + " F# F# F# F#" + "\n" + " b# d# i# k#" + "\n" + " # # # #" + "\n" + " # # # #" + "\n" + "############", " # # # #" + "\n" + " # # # #" + "\n" + " F# F# F# F#" + "\n" + " b# d# i# k#" + "\n" + " # # # #" + "\n" + " # # # #" + "\n" + "############", " # # # #" + "\n" + " F# F# F# F#" + "\n" + " r# r# r# r#" + "\n" + " b# d# i# k#" + "\n" + " # # # #" + "\n" + " # # # #" + "\n" + "############" ); } @Test public void Dont_pick_up_climb_token_if_already_a_climber() { assertWorldEvolvesLike( " " + "\n" + "rcc " + "\n" + "#####", " " + "\n" + " r> " + "\n" + "#####", " " + "\n" + " c> " + "\n" + "#####", " " + "\n" + " cr>" + "\n" + "#####" ); } @Test public void Dont_revert_to_climber_after_digging_and_having_been_on_a_slope() { assertWorldEvolvesLike( " cd " + "\n" + "#j##" + "\n" + "#(##" + "\n" + "####" + "\n" + "#) (" + "\n" + "#) (", " d " + "\n" + "#c##" + "\n" + "#f##" + "\n" + "####" + "\n" + "#) (" + "\n" + "#) (", " d " + "\n" + "# ##" + "\n" + "#G##" + "\n" + "####" + "\n" + "#) (" + "\n" + "#) (", " d " + "\n" + "#F##" + "\n" + "#r##" + "\n" + "####" + "\n" + "#) (" + "\n" + "#) (", " L " + "\n" + "#r##" + "\n" + "#(##" + "\n" + "####" + "\n" + "#) (" + "\n" + "#) (", " r " + "\n" + "# D#" + "\n" + "#(##" + "\n" + "####" + "\n" + "#) (" + "\n" + "#) (", " " + "\n" + "# D#" + "\n" + "#(##" + "\n" + "####" + "\n" + "#) (" + "\n" + "#) (", " " + "\n" + "# r#" + "\n" + "#(D#" + "\n" + "####" + "\n" + "#) (" + "\n" + "#) (", " " + "\n" + "# #" + "\n" + "#(D#" + "\n" + "####" + "\n" + "#) (" + "\n" + "#) (", " " + "\n" + "# #" + "\n" + "#(r#" + "\n" + "##D#" + "\n" + "#) (" + "\n" + "#) (", " " + "\n" + "# #" + "\n" + "#( #" + "\n" + "##D#" + "\n" + "#) (" + "\n" + "#) (", " " + "\n" + "# #" + "\n" + "#( #" + "\n" + "##r#" + "\n" + "#)f(" + "\n" + "#)f(", " " + "\n" + "# #" + "\n" + "#( #" + "\n" + "## #" + "\n" + "#) (" + "\n" + "#)r(" ); } }