// 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) } } }