feat(menu): MainMenu, SettingsMenu, MenuAction (frontend-agnostic)
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
package thb.jeanluc.adventure.menu;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.io.TempDir;
|
||||
import thb.jeanluc.adventure.io.TestIO;
|
||||
import thb.jeanluc.adventure.save.SaveService;
|
||||
import thb.jeanluc.adventure.save.Settings;
|
||||
import thb.jeanluc.adventure.save.SettingsStore;
|
||||
import thb.jeanluc.adventure.io.ConsoleIO;
|
||||
|
||||
import java.nio.file.Path;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
class MenuTest {
|
||||
|
||||
@Test
|
||||
void mainMenuMapsChoiceToAction() {
|
||||
// options order: New Game(1) / Load(2) / Settings(3) / Quit(4)
|
||||
assertThat(MainMenu.show(new TestIO().enqueue("1"))).isEqualTo(MenuAction.NEW_GAME);
|
||||
assertThat(MainMenu.show(new TestIO().enqueue("2"))).isEqualTo(MenuAction.LOAD);
|
||||
assertThat(MainMenu.show(new TestIO().enqueue("3"))).isEqualTo(MenuAction.SETTINGS);
|
||||
assertThat(MainMenu.show(new TestIO().enqueue("4"))).isEqualTo(MenuAction.QUIT);
|
||||
}
|
||||
|
||||
@Test
|
||||
void promptNameUsesDefaultOnBlank() {
|
||||
assertThat(MainMenu.promptName(new TestIO().enqueue(""), "Manor")).isEqualTo("Manor");
|
||||
assertThat(MainMenu.promptName(new TestIO().enqueue("Spooky"), "Manor")).isEqualTo("Spooky");
|
||||
}
|
||||
|
||||
@Test
|
||||
void pickSlotReturnsNullWhenEmpty(@TempDir Path dir) {
|
||||
TestIO io = new TestIO();
|
||||
assertThat(MainMenu.pickSlot(io, new SaveService(dir))).isNull();
|
||||
assertThat(io.allOutput()).contains("No saved games");
|
||||
}
|
||||
|
||||
@Test
|
||||
void settingsMenuTogglesGlyphAndPersists(@TempDir Path dir) {
|
||||
SettingsStore store = new SettingsStore(dir.resolve("settings.json"));
|
||||
// choose "Glyph mode" (assume option 2) → its toggle, then "Back" (last)
|
||||
TestIO io = new TestIO().enqueue("2").enqueue("3");
|
||||
Settings result = SettingsMenu.show(io, Settings.defaults(), store, new ConsoleIO());
|
||||
// UNICODE default toggles to ASCII; persisted
|
||||
assertThat(result.glyphMode()).isEqualTo(ConsoleIO.GlyphMode.ASCII);
|
||||
assertThat(store.load().glyphMode()).isEqualTo(ConsoleIO.GlyphMode.ASCII);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user