67 lines
2.1 KiB
Go
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)
|
|
}
|
|
}
|