// 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 TestHardwareSettingsPersistInApplicationProfile(t *testing.T) { path := filepath.Join(t.TempDir(), "settings.toml") store, err := NewStore(path) if err != nil { t.Fatal(err) } global := DefaultSettings() if err := store.Save(global); err != nil { t.Fatal(err) } application := global application.SpeechServerFactory = "hardwarefactory" application.SpeechOutputModule = "dectalk" application.HardwareSpeechDevice = "/dev/ttyTEST0" application.HardwareSpeechBaudRate = 19200 if err := store.SaveForApplication("Example Editor", application); err != nil { t.Fatal(err) } reopened, err := NewStore(path) if err != nil { t.Fatal(err) } loaded, found, err := reopened.LoadForApplication("Example Editor") if err != nil || !found || loaded.SpeechServerFactory != "hardwarefactory" || loaded.SpeechOutputModule != "dectalk" || loaded.HardwareSpeechDevice != "/dev/ttyTEST0" || loaded.HardwareSpeechBaudRate != 19200 { t.Fatalf("hardware profile=%+v found=%v error=%v", loaded, found, err) } loaded, err = reopened.Load() if err != nil || loaded.SpeechServerFactory != "speechdispatcherfactory" || loaded.HardwareSpeechDevice != "" || loaded.HardwareSpeechBaudRate != 9600 { t.Fatalf("hardware override changed global settings=%+v error=%v", loaded, err) } } func TestHardwareSettingsLoadPythonAndRejectInvalidDevices(t *testing.T) { loaded, err := Load(writeConfig(t, `[general] speechServerFactory = "hardwarefactory" speechServerInfo = ["LiteTalk", "litetalk"] hardwareSpeechDevice = "/dev/ttyTEST0" hardwareSpeechBaudRate = 9600 `)) if err != nil || loaded.SpeechOutputModule != "litetalk" || loaded.HardwareSpeechDevice != "/dev/ttyTEST0" { t.Fatalf("Python hardware settings=%+v error=%v", loaded, err) } for _, device := range []string{"", "auto", "ttyTEST0", "/dev/ttyTEST0\n"} { loaded.HardwareSpeechDevice = device if err := Validate(loaded); err == nil { t.Fatalf("accepted device %q", device) } } }