//go:build !darwin || !appstore package textoutput import ( "errors" "testing" ) type fakePaster struct { pasteErr error typeErr error pasted string typed string } func (p *fakePaster) Paste(text string, keepClipboard bool) error { p.pasted = text return p.pasteErr } func (p *fakePaster) TypeText(text string) error { p.typed = text return p.typeErr } func TestDefaultRouterUsesExistingPastePath(t *testing.T) { paster := &fakePaster{} router := NewRouter(paster) result := router.Output("recognized text", false) if !result.OK || result.Method != "legacy_clipboard_paste" { t.Fatalf("result = %+v", result) } if paster.pasted != "recognized text" || paster.typed != "" { t.Fatalf("paster = %+v", paster) } } func TestDefaultRouterUsesLegacyTypeFallback(t *testing.T) { paster := &fakePaster{pasteErr: errors.New("paste denied")} router := NewRouter(paster) result := router.Output("recognized text", false) if !result.OK || result.Method != "legacy_type_fallback" { t.Fatalf("result = %+v", result) } if paster.typed != "recognized text" { t.Fatalf("typed = %q", paster.typed) } } func TestDefaultRouterKeepsTextOnOutputFailure(t *testing.T) { paster := &fakePaster{pasteErr: errors.New("paste denied"), typeErr: errors.New("type denied")} router := NewRouter(paster) result := router.Output("recognized text", false) if result.OK || result.Text != "recognized text" { t.Fatalf("result = %+v", result) } if router.LastResult().Text != "recognized text" { t.Fatalf("last result = %+v", router.LastResult()) } }