52 lines
1.7 KiB
Go
52 lines
1.7 KiB
Go
// Copyright (c) 2026 Storm Dragon
|
|
// Authors: Storm Dragon, Angus Kola
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
package sound
|
|
|
|
import (
|
|
"context"
|
|
"crypto/sha256"
|
|
"encoding/binary"
|
|
"errors"
|
|
"fmt"
|
|
"log/slog"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestSpeechBeepDecodesWithRoleSoundsDisabled(t *testing.T) {
|
|
service := New(slog.New(slog.DiscardHandler), NativePlayer{Sink: "auto"}, "default", 0.5)
|
|
service.Configure(Configuration{Enabled: false, Theme: "none", Sink: "test", Volume: 0.4})
|
|
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
|
defer cancel()
|
|
if err := service.SpeechBeep(ctx); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
canceled, cancelBeep := context.WithCancel(ctx)
|
|
cancelBeep()
|
|
if err := service.SpeechBeep(canceled); !errors.Is(err, context.Canceled) {
|
|
t.Fatalf("canceled beep = %v", err)
|
|
}
|
|
}
|
|
|
|
func TestCapitalBeepMatchesNVDAAndDecodes(t *testing.T) {
|
|
// PCM from NVDA's C++ generateBeep(2000, 50, 50, 50), compiled separately.
|
|
if got := fmt.Sprintf("%x", sha256.Sum256(capitalBeepWAV[44:])); got != "3385e0c7e50f2b4abd8da47606999f27b651e999bcc04ba853e3a7338f469367" {
|
|
t.Fatalf("capital beep differs from NVDA: %s", got)
|
|
}
|
|
if binary.LittleEndian.Uint32(capitalBeepWAV[24:]) != 44100 || binary.LittleEndian.Uint16(capitalBeepWAV[22:]) != 2 {
|
|
t.Fatal("capital beep must be 44100 Hz stereo")
|
|
}
|
|
service := New(slog.New(slog.DiscardHandler), NativePlayer{Sink: "test"}, "none", 0.5)
|
|
service.Configure(Configuration{Enabled: false, Theme: "none", Sink: "test", Volume: 0.4})
|
|
if err := service.CapitalBeep(context.Background()); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
cancel()
|
|
if err := service.CapitalBeep(ctx); !errors.Is(err, context.Canceled) {
|
|
t.Fatalf("canceled capital beep: %v", err)
|
|
}
|
|
}
|