// Copyright (c) 2026 Storm Dragon // Authors: Storm Dragon, Angus Kola // SPDX-License-Identifier: GPL-3.0-or-later package config import ( "path/filepath" "testing" ) func i3Flags(r ReadingSettings) []bool { return []bool{r.I3Modes, r.I3Workspaces, r.I3WindowStates, r.I3Urgency, r.I3Marks, r.I3WorkspaceMoves} } func TestI3DefaultsPersistenceAndInheritance(t *testing.T) { old, err := Load(filepath.Join("testdata", "settings-v2.toml")) if err != nil { t.Fatal(err) } for _, v := range i3Flags(old.Reading) { if !v { t.Fatal("existing configuration defaults i3 announcements off") } } store, err := NewStore(filepath.Join(t.TempDir(), "settings.toml")) if err != nil { t.Fatal(err) } global := DefaultSettings() if err = store.Save(global); err != nil { t.Fatal(err) } app := global app.Reading.I3Modes = false app.Reading.I3Workspaces = false app.Reading.I3WindowStates = false app.Reading.I3Urgency = false app.Reading.I3Marks = false app.Reading.I3WorkspaceMoves = false if err = store.SaveForApplication("Quiet App", app); err != nil { t.Fatal(err) } loaded, found, err := store.LoadForApplication("Quiet App") if err != nil || !found { t.Fatalf("%t %v", found, err) } for _, v := range i3Flags(loaded.Reading) { if v { t.Fatal("override lost") } } inherited, _, err := store.LoadForApplication("Other App") if err != nil { t.Fatal(err) } for _, v := range i3Flags(inherited.Reading) { if !v { t.Fatal("override leaked") } } global.Reading = app.Reading if err = store.Save(global); err != nil { t.Fatal(err) } inherited, _, err = store.LoadForApplication("Other App") if err != nil { t.Fatal(err) } for _, v := range i3Flags(inherited.Reading) { if v { t.Fatal("global update not inherited") } } }