package rabbitescape.engine.logic;
import static org.hamcrest.MatcherAssert.*;
import static rabbitescape.engine.Tools.*;
import static rabbitescape.engine.textworld.TextWorldManip.*;
import static rabbitescape.engine.util.WorldAssertions.*;
import org.junit.Test;
import rabbitescape.engine.World;
public class TestDigging
{
@Test
public void Dig_through_single_floor()
{
World world = createWorld(
"rd ",
"###",
" ",
" ",
"###"
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" r ",
"#D#",
" ",
" ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"#D#",
" ",
" ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"#r#",
" f ",
" f ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"# #",
" ",
" r>",
"###"
)
);
}
@Test
public void Dig_through_multilevel_floor()
{
World world = createWorld(
"rd ",
"###",
"###",
"###",
" ",
" ",
"###"
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" r ",
"#D#",
"###",
"###",
" ",
" ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"#D#",
"###",
"###",
" ",
" ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"#r#",
"#D#",
"###",
" ",
" ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"# #",
"#D#",
"###",
" ",
" ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"# #",
"#r#",
"#D#",
" ",
" ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"# #",
"# #",
"#D#",
" ",
" ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"# #",
"# #",
"#r#",
" f ",
" f ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"# #",
"# #",
"# #",
" ",
" r>",
"###"
)
);
}
@Test
public void Stop_after_single_gap()
{
World world = createWorld(
"rd ",
"###",
" ",
"###"
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" r ",
"#D#",
" ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"#D#",
" ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"#r#",
" f ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"# #",
" r>",
"###"
)
);
}
@Test
public void Stop_after_single_slope()
{
assertWorldEvolvesLike(
" dj" + "\n" +
" /#" + "\n" +
" " + "\n" +
"###",
" " + "\n" +
" D#" + "\n" +
" " + "\n" +
"###",
" " + "\n" +
" j#" + "\n" +
" f " + "\n" +
"###",
" " + "\n" +
" #" + "\n" +
"<j " + "\n" +
"###"
);
}
@Test
public void Stop_after_single_gap_after_multilevel_dig()
{
World world = createWorld(
"rd ",
"###",
"###",
"###",
" ",
"###"
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" r ",
"#D#",
"###",
"###",
" ",
"###"
)
);
world.step();
world.step();
world.step();
world.step();
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"# #",
"# #",
"#D#",
" ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"# #",
"# #",
"#r#",
" f ",
"###"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" ",
"# #",
"# #",
"# #",
" r>",
"###"
)
);
}
@Test
public void Dig_through_single_slope()
{
assertWorldEvolvesLike(
" r " + "\n" +
" * " + "\n" +
" " + "\n" +
"###" + "\n" +
":*=d/",
" " + "\n" +
" D " + "\n" +
" " + "\n" +
"###",
" " + "\n" +
" r " + "\n" +
" f " + "\n" +
"###"
);
}
@Test
public void Dig_through_single_bridge()
{
assertWorldEvolvesLike(
" r " + "\n" +
" * " + "\n" +
" " + "\n" +
"###" + "\n" +
":*=d(",
" " + "\n" +
" D " + "\n" +
" " + "\n" +
"###",
" " + "\n" +
" r " + "\n" +
" f " + "\n" +
"###"
);
}
@Test
public void Dig_through_slope_plus_blocks()
{
assertWorldEvolvesLike(
" r " + "\n" +
" * " + "\n" +
" # " + "\n" +
" # " + "\n" +
" " + "\n" +
"###" + "\n" +
":*=d/",
" " + "\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" +
"###"
);
}
@Test
public void Dig_through_bridge_plus_blocks()
{
assertWorldEvolvesLike(
" r " + "\n" +
" * " + "\n" +
" # " + "\n" +
" # " + "\n" +
" " + "\n" +
"###" + "\n" +
":*=d(",
" " + "\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" +
"###"
);
}
@Test
public void Dig_through_bridge_plus_bridges()
{
assertWorldEvolvesLike(
" r " + "\n" +
" * " + "\n" +
" ( " + "\n" +
" ( " + "\n" +
" " + "\n" +
"###" + "\n" +
":*=d(",
" " + "\n" +
" D " + "\n" +
" ( " + "\n" +
" ( " + "\n" +
" " + "\n" +
"###",
" " + "\n" +
" r " + "\n" +
" h " + "\n" +
" ( " + "\n" +
" " + "\n" +
"###",
" " + "\n" +
" '" + "\n" +
" r " + "\n" + // Starts walking
" ( " + "\n" +
" " + "\n" +
"###"
);
}
@Test
public void Bash_stops_you_digging()
{
assertWorldEvolvesLike(
" bb " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
"*dd " + "\n" +
"### " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
":*=rr",
" " + "\n" +
" bb " + "\n" +
" ff " + "\n" +
" " + "\n" +
" r> " + "\n" +
"#D# " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" bb " + "\n" +
" ff " + "\n" +
" r " + "\n" +
"#DD " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" bb " + "\n" +
" ff " + "\n" +
"#rD " + "\n" +
" D# " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" bb " + "\n" +
"#ff " + "\n" +
" DD " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
"#bb " + "\n" +
" ff " + "\n" +
" D# " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
"# " + "\n" +
" brI" + "\n" +
" f# " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
"# " + "\n" +
" r>" + "\n" +
" rK " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
"# " + "\n" +
" r" + "\n" +
" r>f" + "\n" +
" ##f" + "\n" +
" ## "
);
}
@Test
public void Bridge_stops_you_digging()
{
assertWorldEvolvesLike(
" ii " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
"*dd " + "\n" +
"### " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
":*=rr",
" " + "\n" +
" ii " + "\n" +
" ff " + "\n" +
" " + "\n" +
" r> " + "\n" +
"#D# " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" ii " + "\n" +
" ff " + "\n" +
" r " + "\n" +
"#DD " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" ii " + "\n" +
" ff " + "\n" +
"#rD " + "\n" +
" D# " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" ii " + "\n" +
"#ff " + "\n" +
" DD " + "\n" +
" ## " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
"#ii " + "\n" +
" ff " + "\n" +
" D# " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
"# " + "\n" +
" irB" + "\n" +
" f# " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
"# " + "\n" +
" r[" + "\n" +
" B# " + "\n" +
" ## " + "\n" +
" ## ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
"# " + "\n" +
" r{" + "\n" +
" [# " + "\n" +
" ## " + "\n" +
" ## "
);
}
@Test
public void Bashing_fails_if_first_block_is_unbreakable()
{
assertWorldEvolvesLike(
"rd " + "\n" +
"#M#",
" r " + "\n" +
"#D#",
" r>" + "\n" +
"#M#"
);
}
@Test
public void Digging_fails_if_later_block_is_unbreakable()
{
assertWorldEvolvesLike(
"rd " + "\n" +
"###" + "\n" +
"#M#",
" r " + "\n" +
"#D#" + "\n" +
"#M#",
" " + "\n" +
"#D#" + "\n" +
"#M#",
" " + "\n" +
"#r#" + "\n" +
"#D#",
" " + "\n" +
"#?#" + "\n" +
"#M#"
);
}
@Test
public void Digging_fails_if_later_block_is_unbreakable_on_slope()
{
assertWorldEvolvesLike(
"rd " + "\n" +
"#/ " + "\n" +
"#M#",
" r " + "\n" +
"#h " + "\n" +
"#M#",
" " + "\n" +
"#D " + "\n" +
"#M#",
" " + "\n" +
"#r " + "\n" +
"#D#",
" " + "\n" +
"#r>" + "\n" +
"#M#"
);
}
@Test
public void Digging_fails_if_later_block_is_unbreakable_on_bridge()
{
assertWorldEvolvesLike(
"rd " + "\n" +
"#( " + "\n" +
"#M#",
" r " + "\n" +
"#h " + "\n" +
"#M#",
" " + "\n" +
"#D " + "\n" +
"#M#",
" " + "\n" +
"#r " + "\n" +
"#D#",
" " + "\n" +
"#r>" + "\n" +
"#M#"
);
}
}