package speech
import (
"os"
"runtime"
"testing"
"time"
)
func TestParseMacVoice(t *testing.T) {
fixtureWithKyoko := `Eddy (Japanese (Japan)) ja_JP # こんにちは! 私の名前はEddyです。
Kyoko ja_JP # こんにちは! 私の名前はKyokoです。
Otoya ja_JP # こんにちは! 私の名前はOtoyaです。`
v, ok := parseMacVoice([]byte(fixtureWithKyoko))
if !ok || v != "Kyoko" {
t.Errorf("parseMacVoice with Kyoko = (%q, %v), want (Kyoko, true)", v, ok)
}
fixtureWithoutKyoko := `Eddy (Japanese (Japan)) ja_JP # こんにちは! 私の名前はEddyです。
Otoya ja_JP # こんにちは! 私の名前はOtoyaです。`
v2, ok2 := parseMacVoice([]byte(fixtureWithoutKyoko))
if !ok2 || v2 != "Eddy" {
t.Errorf("parseMacVoice without Kyoko = (%q, %v), want (Eddy, true)", v2, ok2)
}
fixtureNoJapanese := `Alex en_US # Hello
Fred en_US # Hello`
v3, ok3 := parseMacVoice([]byte(fixtureNoJapanese))
if ok3 || v3 != "" {
t.Errorf("parseMacVoice no ja_JP = (%q, %v), want ('', false)", v3, ok3)
}
}
func TestSpeakReal(t *testing.T) {
if os.Getenv("CHIRAMI_LIVE_TESTS") == "" {
t.Skip("talks to the network or makes sound; set CHIRAMI_LIVE_TESTS=1")
}
if testing.Short() {
t.Skip("skipping real speak test in short mode")
}
// Real invocation of Speak on macOS
if runtime.GOOS == "darwin" {
err := Speak("テスト")
if err != nil {
t.Fatalf("Speak failed: %v", err)
}
// Fast subsequent call to verify killing previous process works cleanly
time.Sleep(50 * time.Millisecond)
err = Speak("こんにちは")
if err != nil {
t.Fatalf("Second Speak failed: %v", err)
}
time.Sleep(600 * time.Millisecond)
}
}
func TestLinuxSpeech(t *testing.T) {
if os.Getenv("CHIRAMI_LIVE_TESTS") == "" {
t.Skip("talks to the network or makes sound; set CHIRAMI_LIVE_TESTS=1")
}
if runtime.GOOS != "linux" {
t.Skip("linux-only test")
}
err := Speak("こんにちは")
if err != nil {
t.Fatalf("Linux Speak failed: %v", err)
}
time.Sleep(1 * time.Second)
}