package rabbitescape.ui.text;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.CoreMatchers.*;
import org.junit.*;
import rabbitescape.engine.menu.Menu;
import rabbitescape.engine.menu.MenuItem;
public class TestTextMenu
{
@Test
public void Empty_menu_has_no_items()
{
Menu menu = new Menu( "", new MenuItem[] {} );
assertThat(
TextMenu.renderItems( menu ),
equalTo(
""
)
);
}
@Test
public void Disabled_items_are_shown_as_disabled()
{
assertThat(
TextMenu.renderItems( new MyMenu().m ),
equalTo(
"1. a\n"
+ " b (disabled)\n"
+ "3. c\n"
)
);
}
@Test
public void Items_can_be_selected()
{
MyMenu menu = new MyMenu();
// Ask for item number 1, then later number 3
FakeTerminal terminal = new FakeTerminal( "1", "3" );
TextMenu textMenu = new TextMenu( null, terminal.t, null );
// Item number 1 was returned
assertThat( textMenu.showMenu( menu.m ), sameInstance( menu.a ) );
// Then item number 3 was returned
assertThat( textMenu.showMenu( menu.m ), sameInstance( menu.c ) );
}
@Test
public void Disabled_items_can_not_be_selected()
{
MyMenu menu = new MyMenu();
// Ask for item number 2
FakeTerminal terminal = new FakeTerminal( "2", "1" );
TextMenu textMenu = new TextMenu( null, terminal.t, null );
// The 2 was ignored, and the 1 was listened to
assertThat( textMenu.showMenu( menu.m ), sameInstance( menu.a ) );
assertThat(
terminal.out.toString(),
equalTo(
"\n"
+ "\n"
+ "1. a\n"
+ " b (disabled)\n"
+ "3. c\n"
+ "\n"
+ "Enter a number (1-3), or 0 to go back: "
+ "That menu item is disabled.\n"
+ "Enter a number (1-3), or 0 to go back: "
)
);
}
// ---
/**
* Make a menu containing 3 items, one of which is disabled.
*/
private static class MyMenu
{
public final MenuItem a;
public final MenuItem b;
public final MenuItem c;
public final Menu m;
public MyMenu()
{
this.a = new MenuItem( "a", MenuItem.Type.ABOUT, true, false );
this.b = new MenuItem( "b", MenuItem.Type.ABOUT, false, false );
this.c = new MenuItem( "c", MenuItem.Type.ABOUT, true, false );
this.m = new Menu( "", new MenuItem[] { a, b, c } );
}
}
}