package rabbitescape.engine.logic;
import static org.hamcrest.CoreMatchers.*;
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 TestExit
{
@Test
public void Rabbit_disappears_into_exit()
{
World world = createWorld(
"r O ",
"#####"
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" r>O ",
"#####"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" r> ",
"#####"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" R ", // Entering
"#####"
)
);
world.step();
assertThat(
renderWorld( world, true, false ),
equalTo(
" O ", // Gone
"#####"
)
);
}
@Test
public void World_keeps_score()
{
World world = createWorld(
"Ojjjj ",
"########"
);
world.step();
assertThat( world.num_saved, equalTo( 0 ) );
world.step();
assertThat( world.num_saved, equalTo( 1 ) );
world.step();
assertThat( world.num_saved, equalTo( 2 ) );
world.step();
assertThat( world.num_saved, equalTo( 3 ) );
world.step();
assertThat( world.num_saved, equalTo( 4 ) );
}
@Test
public void Splatting_prevents_exit()
{
World world = createWorld(
"r # ",
"# r # ",
" # r # ",
" # r # ",
" # r # ",
" # r ",
" # r ",
" # r ",
" # ",
" O O O O O O O O ",
" # # # # # # # # ",
"# #",
"##################"
);
assertWorldEvolvesLike(
world,
10,
new String[] {
" # ",
"# # ",
" # # ",
" # # ",
" # # ",
" # ",
" # ",
" # ",
" # ",
" O O O O O O O O ",
" # # # # # # # # ",
"# #",
"##################"
});
assertThat( world.num_saved, equalTo ( 3 ) );
}
@Test
public void Climb_into_exit()
{
// Has a trap to see if the rabbit climbed past
World world = createWorld(
" ",
" O# #",
" ###",
"rc# ",
"### "
);
assertWorldEvolvesLike(
world,
6,
new String[] {
" ",
" O# #",
" ###",
" # ",
"### "
});
// The rabbit escaped
assertThat( world.num_saved, equalTo ( 1 ) );
}
@Test
public void Fall_past_exit()
{
// All must die
World world = createWorld(
"rrrrrrr",
"O ",
" O ",
" O ",
" O ",
" O ",
" O ",
" O"
);
assertWorldEvolvesLike(
world,
5,
new String[] {
" ",
"O ",
" O ",
" O ",
" O ",
" O ",
" O ",
" O"
});
// None lived
assertThat( world.num_saved, equalTo ( 0 ) );
}
}