42 lines
1.1 KiB
Go
42 lines
1.1 KiB
Go
// Copyright (c) 2026 Storm Dragon
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package config
|
|
|
|
import (
|
|
"path/filepath"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestWineSettingsRoundTripAndValidation(t *testing.T) {
|
|
settings := DefaultSettings()
|
|
settings.Wine = WineSettings{ControllerOnly: true, ExcludedPrograms: []string{"Game.exe", "Another Game.exe"}}
|
|
path := filepath.Join(t.TempDir(), "settings.toml")
|
|
store, err := NewStore(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := store.Save(settings); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
loaded, err := Load(path)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !reflect.DeepEqual(loaded.Wine, settings.Wine) {
|
|
t.Fatalf("Wine settings = %+v", loaded.Wine)
|
|
}
|
|
cloned := cloneSettings(settings)
|
|
cloned.Wine.ExcludedPrograms[0] = "Changed.exe"
|
|
if settings.Wine.ExcludedPrograms[0] != "Game.exe" {
|
|
t.Fatal("clone aliases exclusions")
|
|
}
|
|
for _, name := range []string{"", "../game.exe", `C:\game.exe`, "Game.exe\rOther.exe", "game.exe\n"} {
|
|
settings.Wine.ExcludedPrograms = []string{name}
|
|
if err := Validate(settings); err == nil {
|
|
t.Fatalf("accepted exclusion %q", name)
|
|
}
|
|
}
|
|
}
|