NewSink bekommt einen optionalen Log-Writer (die CLI übergibt stderr);
zuvor verwarf der null-Sink bei erfolgreicher Synthese stumm — die
sichtbare Zeile kam nur aus dem ErrNoByteOutput-Zweig. Sink-Interface
unverändert; Aufrufstellen ab Task 03 müssen den Writer übergeben.
TestSayArgumentMitNullSink beweist die Zeile jetzt extern auf dem
CLI-Pfad, TestNewSink deckt das Factory-Wiring ab; Live-Beweis mit
espeak-ng dokumentiert ("audio: N Bytes verworfen (null sink)", Exit 0).
Dazu (Minor): "was" aus englishWords entfernt — widersprach dem
Mehrdeutigkeits-Kommentar und dem Report; neuer TestFall
"Was macht er?" → de.
39 lines
1.5 KiB
Go
39 lines
1.5 KiB
Go
package langdetect
|
|
|
|
import "testing"
|
|
|
|
// TestDetect ist tischgesteuert: Eingabetext → erwartete Sprache.
|
|
// Der Default "de" gilt für leeren, unentscheidbaren und gemischten
|
|
// Text ohne englische Mehrheit.
|
|
func TestDetect(t *testing.T) {
|
|
cases := []struct {
|
|
name string
|
|
text string
|
|
want string
|
|
}{
|
|
{"leer", "", "de"},
|
|
{"nur whitespace", " \n\t ", "de"},
|
|
{"nur interpunktion", "!!! ??? ...", "de"},
|
|
{"deutsch satz", "Der Build wurde erfolgreich abgeschlossen und das Deployment ist fertig.", "de"},
|
|
{"deutsch frage mit was", "Was macht er?", "de"},
|
|
{"deutsch umlaute", "Größe früh Ärzteübung — schön daß es klappt", "de"},
|
|
{"ß alleine", "weiß", "de"},
|
|
{"englisch satz", "The build has finished and the deployment is done.", "en"},
|
|
{"englisch imperativ", "Please wait until the tests are green.", "en"},
|
|
{"englisch kurz", "done", "en"},
|
|
{"gemischt englisch dominiert", "the build is done and ready for you", "en"},
|
|
{"gemischt deutsch dominiert", "Der build ist done und fertig für dich", "de"},
|
|
{"gemischt gleichstand", "der the", "de"},
|
|
{"unklare sprache", "Build 2026-10-18 14:22 UTC", "de"},
|
|
{"agenten-typisch en", "Task completed. Please review the changes and approve.", "en"},
|
|
{"agenten-typisch de", "Aufgabe abgeschlossen. Bitte prüfen und freigeben.", "de"},
|
|
}
|
|
for _, tc := range cases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
if got := Detect(tc.text); got != tc.want {
|
|
t.Errorf("Detect(%q) = %q, want %q", tc.text, got, tc.want)
|
|
}
|
|
})
|
|
}
|
|
}
|