Files

67 lines
2.1 KiB
Go

// Copyright (c) 2026 Storm Dragon
// Authors: Storm Dragon, Angus Kola
// SPDX-License-Identifier: GPL-3.0-or-later
package speech
import (
"context"
"testing"
"time"
)
func TestReadDefaults(t *testing.T) {
path, server := newSettingsServer(t, func(command string) string {
switch command {
case "GET RATE":
return "200-20\r\n200 OK\r\n"
case "GET PITCH":
return "200--10\r\n200 OK\r\n"
case "GET VOLUME":
return "200-100\r\n200 OK\r\n"
}
return ""
})
defaults, err := ReadDefaults(t.Context(), path)
if err != nil || defaults.Rate == nil || *defaults.Rate != 20 ||
defaults.Pitch == nil || *defaults.Pitch != -10 || defaults.Volume == nil || *defaults.Volume != 100 {
t.Fatalf("defaults=%+v, err=%v", defaults, err)
}
for _, command := range []string{"SET SELF RATE 20", "SET SELF PITCH -10", "SET SELF VOLUME 100", "SPEAK"} {
if server.saw(1, command) {
t.Fatalf("query changed speech: %s", command)
}
}
}
func TestReadDefaultsRejectsUnsupportedAndInvalidValues(t *testing.T) {
for _, response := range []string{"500 UNSUPPORTED\r\n", "200 OK\r\n", "200-invalid\r\n200 OK\r\n",
"200-101\r\n200 OK\r\n", "200-0\r\n200-1\r\n200 OK\r\n"} {
t.Run(response, func(t *testing.T) {
path, _ := newSettingsServer(t, func(string) string { return response })
defaults, err := ReadDefaults(t.Context(), path)
if err != nil || defaults.Rate != nil || defaults.Pitch != nil || defaults.Volume != nil {
t.Fatalf("invalid defaults=%+v, err=%v", defaults, err)
}
})
}
}
func TestReadDefaultsRetainsPartialValuesAndHonorsDeadline(t *testing.T) {
path, _ := newSettingsServer(t, func(command string) string {
if command == "GET RATE" {
return "200-0\r\n200 OK\r\n"
}
if command == "GET PITCH" {
return "200-unfinished\r\n"
}
return ""
})
ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond)
defer cancel()
defaults, err := ReadDefaults(ctx, path)
if err == nil || defaults.Rate == nil || *defaults.Rate != 0 || defaults.Pitch != nil || defaults.Volume != nil {
t.Fatalf("partial defaults=%+v, err=%v", defaults, err)
}
}