diff options
Diffstat (limited to 'gui/internal/model/prefs_test.go')
| -rw-r--r-- | gui/internal/model/prefs_test.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/gui/internal/model/prefs_test.go b/gui/internal/model/prefs_test.go new file mode 100644 index 0000000..6c01dee --- /dev/null +++ b/gui/internal/model/prefs_test.go @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package model + +import ( + "os" + "path/filepath" + "testing" +) + +// sandboxHome points HOME and every XDG_* at a temporary directory, as the +// other tests here do. +func sandboxHome(t *testing.T) string { + t.Helper() + h := t.TempDir() + t.Setenv("HOME", h) + for _, v := range []string{"XDG_CONFIG_HOME", "XDG_STATE_HOME", "XDG_DATA_HOME", "XDG_CACHE_HOME"} { + t.Setenv(v, "") + } + return h +} + +// TestPrefsRoundTrip: what is saved comes back, and the file lands beside +// krino.conf. +func TestPrefsRoundTrip(t *testing.T) { + h := sandboxHome(t) + p := DefaultPrefs() + p.FontSize = 13 + p.Colours = false + p.SelectAll = false + if err := p.Save(); err != nil { + t.Fatal(err) + } + if got := LoadPrefs(); got != p { + t.Errorf("loaded %+v, want %+v", got, p) + } + want := filepath.Join(h, ".config", "krino", "gui.json") + if _, err := os.Stat(want); err != nil { + t.Errorf("not written to %s: %v", want, err) + } +} + +// TestPrefsWithoutAFile: the first run has no file, and damaged text is not +// worth refusing to open a window over. +func TestPrefsWithoutAFile(t *testing.T) { + sandboxHome(t) + if got := LoadPrefs(); got != DefaultPrefs() { + t.Errorf("with no file: %+v, want the defaults", got) + } + if err := os.MkdirAll(filepath.Dir(PrefsFile()), 0o755); err != nil { + t.Fatal(err) + } + if err := os.WriteFile(PrefsFile(), []byte("{not json"), 0o644); err != nil { + t.Fatal(err) + } + if got := LoadPrefs(); got != DefaultPrefs() { + t.Errorf("with damaged text: %+v, want the defaults", got) + } +} |
