Ariver
2026-07-11 015f1089ea875a153dd2a18ef42c25145d4868f5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//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())
    }
}