feat(settings): Settings + SettingsStore; runtime-togglable ConsoleIO

This commit is contained in:
2026-06-01 14:52:28 +02:00
parent 404221525c
commit dfc50f0d9f
5 changed files with 123 additions and 3 deletions

View File

@@ -0,0 +1,23 @@
package thb.jeanluc.adventure.io;
import org.junit.jupiter.api.Test;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.StringReader;
import static org.assertj.core.api.Assertions.assertThat;
class ConsoleIOSettingsTest {
@Test
void colorSetterTogglesAnsiEmission() {
ByteArrayOutputStream out = new ByteArrayOutputStream();
ConsoleIO io = new ConsoleIO(new BufferedReader(new StringReader("")),
new PrintStream(out), ConsoleIO.ColorMode.OFF, ConsoleIO.GlyphMode.UNICODE);
io.setColorMode(ConsoleIO.ColorMode.ON);
io.print(thb.jeanluc.adventure.io.text.StyledText.builder().heading("Hi").build());
assertThat(out.toString()).contains("["); // ANSI escape present
}
}

View File

@@ -0,0 +1,27 @@
package thb.jeanluc.adventure.save;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import thb.jeanluc.adventure.io.ConsoleIO;
import java.nio.file.Path;
import static org.assertj.core.api.Assertions.assertThat;
class SettingsStoreTest {
@Test
void savesAndLoads(@TempDir Path dir) {
SettingsStore store = new SettingsStore(dir.resolve("settings.json"));
store.save(new Settings(ConsoleIO.ColorMode.ON, ConsoleIO.GlyphMode.ASCII));
Settings loaded = store.load();
assertThat(loaded.colorMode()).isEqualTo(ConsoleIO.ColorMode.ON);
assertThat(loaded.glyphMode()).isEqualTo(ConsoleIO.GlyphMode.ASCII);
}
@Test
void missingFileReturnsDefaults(@TempDir Path dir) {
Settings loaded = new SettingsStore(dir.resolve("nope.json")).load();
assertThat(loaded).isEqualTo(Settings.defaults());
}
}