From 7380dcae419b648c5ff0bf7d65249f04c718003e Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Mon, 1 Jun 2026 23:17:26 +0200 Subject: [PATCH] refactor(settings): guard all Settings fields vs null; tidy import + test Guard colorMode and glyphMode against null in the Settings compact constructor (alongside the existing musicLevel guard), so a hand-edited settings.json with a missing field no longer NPEs in SettingsMenu. Remove the unused MusicLevel import from SettingsMenu. Assert that the defaulted musicLevel survives a round-trip in SettingsStoreTest. Co-Authored-By: Claude Sonnet 4.6 --- .../main/java/thb/jeanluc/adventure/menu/SettingsMenu.java | 1 - .../src/main/java/thb/jeanluc/adventure/save/Settings.java | 6 ++++++ .../java/thb/jeanluc/adventure/save/SettingsStoreTest.java | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Semesterprojekt/src/main/java/thb/jeanluc/adventure/menu/SettingsMenu.java b/Semesterprojekt/src/main/java/thb/jeanluc/adventure/menu/SettingsMenu.java index ecd6299..7acf8fc 100644 --- a/Semesterprojekt/src/main/java/thb/jeanluc/adventure/menu/SettingsMenu.java +++ b/Semesterprojekt/src/main/java/thb/jeanluc/adventure/menu/SettingsMenu.java @@ -2,7 +2,6 @@ package thb.jeanluc.adventure.menu; import thb.jeanluc.adventure.io.ConsoleIO; import thb.jeanluc.adventure.io.GameIO; -import thb.jeanluc.adventure.io.MusicLevel; import thb.jeanluc.adventure.save.Settings; import thb.jeanluc.adventure.save.SettingsStore; diff --git a/Semesterprojekt/src/main/java/thb/jeanluc/adventure/save/Settings.java b/Semesterprojekt/src/main/java/thb/jeanluc/adventure/save/Settings.java index a46411b..cc30359 100644 --- a/Semesterprojekt/src/main/java/thb/jeanluc/adventure/save/Settings.java +++ b/Semesterprojekt/src/main/java/thb/jeanluc/adventure/save/Settings.java @@ -7,6 +7,12 @@ import thb.jeanluc.adventure.io.MusicLevel; public record Settings(ConsoleIO.ColorMode colorMode, ConsoleIO.GlyphMode glyphMode, MusicLevel musicLevel) { public Settings { + if (colorMode == null) { + colorMode = ConsoleIO.ColorMode.AUTO; + } + if (glyphMode == null) { + glyphMode = ConsoleIO.GlyphMode.UNICODE; + } if (musicLevel == null) { musicLevel = MusicLevel.MEDIUM; // backward-compat: old saves lack this field } diff --git a/Semesterprojekt/src/test/java/thb/jeanluc/adventure/save/SettingsStoreTest.java b/Semesterprojekt/src/test/java/thb/jeanluc/adventure/save/SettingsStoreTest.java index ccf26ab..5524db4 100644 --- a/Semesterprojekt/src/test/java/thb/jeanluc/adventure/save/SettingsStoreTest.java +++ b/Semesterprojekt/src/test/java/thb/jeanluc/adventure/save/SettingsStoreTest.java @@ -20,6 +20,7 @@ class SettingsStoreTest { Settings loaded = store.load(); assertThat(loaded.colorMode()).isEqualTo(ConsoleIO.ColorMode.ON); assertThat(loaded.glyphMode()).isEqualTo(ConsoleIO.GlyphMode.ASCII); + assertThat(loaded.musicLevel()).isEqualTo(MusicLevel.MEDIUM); } @Test