38 lines
1.1 KiB
Go
38 lines
1.1 KiB
Go
// Copyright (c) 2026 Storm Dragon
|
|
// Authors: Storm Dragon, Angus Kola
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package app
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"log/slog"
|
|
"testing"
|
|
)
|
|
|
|
func TestCapitalBeepCancellationAndFailure(t *testing.T) {
|
|
for _, interrupt := range []bool{false, true} {
|
|
speaker := &spellingTestSpeaker{}
|
|
worker := newSpeechWorker(slog.New(slog.DiscardHandler), speaker)
|
|
worker.capitalization = func() (bool, bool) { return true, true }
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
worker.capitalBeep = func(beepContext context.Context) error {
|
|
if interrupt {
|
|
cancel()
|
|
return beepContext.Err()
|
|
}
|
|
return errors.New("audio unavailable")
|
|
}
|
|
err := worker.deliver(ctx, speechRequest{Text: "A", Character: true})
|
|
cancel()
|
|
if interrupt {
|
|
if !errors.Is(err, context.Canceled) || len(speaker.parts) != 0 {
|
|
t.Fatalf("canceled capital: %v %v", err, speaker.parts)
|
|
}
|
|
} else if err != nil || len(speaker.parts) != 2 || speaker.parts[0] != "cap" || speaker.parts[1] != "A" {
|
|
t.Fatalf("failed beep suppressed speech: %v %v", err, speaker.parts)
|
|
}
|
|
}
|
|
}
|