Cthulhu is no longer a fork. Now it is a screen reader written in Golang.
This commit is contained in:
1 parent
a998fe67de
commit
069fc674dc
708 files changed
+112482
-532
No files matched your search
@@ -0,0 +1,90 @@
|
||||
// Copyright (c) 2026 Storm Dragon
|
||||
// Authors: Storm Dragon, Angus Kola
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestProgressSettingsPersistenceAndInheritance(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), "settings.toml")
|
||||
store, err := NewStore(path)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
global := DefaultSettings()
|
||||
global.ProgressBar.OutputMode = "both"
|
||||
global.ProgressBar.ReportBackground = true
|
||||
if err := store.Save(global); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
application := global
|
||||
application.ProgressBar.OutputMode = "off"
|
||||
if err := store.SaveForApplication("Example Application", application); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
loaded, err := store.Load()
|
||||
if err != nil || loaded.ProgressBar != global.ProgressBar {
|
||||
t.Fatalf("global progress: %+v, %v", loaded.ProgressBar, err)
|
||||
}
|
||||
app, found, err := store.LoadForApplication("Example Application")
|
||||
if err != nil || !found || app.ProgressBar != application.ProgressBar {
|
||||
t.Fatalf("application progress: %+v, %v", app.ProgressBar, err)
|
||||
}
|
||||
global.ProgressBar.ReportBackground = false
|
||||
global.ProgressBar.SpeechPercentageInterval = 5
|
||||
if err := store.Save(global); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
app, _, err = store.LoadForApplication("Example Application")
|
||||
if err != nil || app.ProgressBar.OutputMode != "off" || app.ProgressBar.ReportBackground || app.ProgressBar.SpeechPercentageInterval != 5 {
|
||||
t.Fatalf("inherited progress: %+v, %v", app.ProgressBar, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestObsoleteProgressFieldsDoNotBreakExistingFiles(t *testing.T) {
|
||||
path := filepath.Join(t.TempDir(), "settings.toml")
|
||||
contents := "schema-version = 2\nactive-profile = 'default'\n[profiles.default.sound]\nbeep-progress-updates = false\nprogress-beep-interval = 7\nplay-for-value = true\n"
|
||||
if err := os.WriteFile(path, []byte(contents), 0600); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
store, err := NewStore(path)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
settings, err := store.Load()
|
||||
if err != nil || settings.ProgressBar != DefaultProgressBarSettings() {
|
||||
t.Fatalf("existing settings: %+v, %v", settings.ProgressBar, err)
|
||||
}
|
||||
if err := store.Save(settings); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, key := range []string{"beep-progress-updates", "progress-beep-interval", "play-for-value"} {
|
||||
if strings.Contains(string(data), key) {
|
||||
t.Fatalf("obsolete field %s was saved", key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestInvalidProgressSettingsRejected(t *testing.T) {
|
||||
for _, change := range []func(*ProgressBarSettings){
|
||||
func(s *ProgressBarSettings) { s.OutputMode = "invalid" },
|
||||
func(s *ProgressBarSettings) { s.BeepPercentageInterval = 0 },
|
||||
func(s *ProgressBarSettings) { s.SpeechPercentageInterval = 101 },
|
||||
} {
|
||||
settings := DefaultSettings()
|
||||
change(&settings.ProgressBar)
|
||||
if Validate(settings) == nil {
|
||||
t.Fatalf("invalid progress settings accepted: %+v", settings.ProgressBar)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user