Files
cthulhu/internal/atspi/text_embedded_native_test.go

42 lines
1.8 KiB
Go

package atspi
import (
"context"
"strings"
"testing"
"time"
)
func TestEmbeddedTextBudgetReportsIncompleteExpansion(t *testing.T) {
for _, test := range []struct {
name, raw, want string
depth int
budget embeddedTextBudget
incomplete bool
}{
{"nodes", "Before \ufffc after", "Before after", 0, embeddedTextBudget{nodes: 0, characters: 100, deadline: time.Now().Add(time.Hour)}, true},
{"deadline", "Before \ufffc after", "Before after", 0, embeddedTextBudget{nodes: 32, characters: 100, deadline: time.Time{}}, true},
{"depth", "Before \ufffc after", "Before after", 8, embeddedTextBudget{nodes: 32, characters: 100, deadline: time.Now().Add(time.Hour)}, true},
{"characters", "猫text", "猫", 0, embeddedTextBudget{nodes: 32, characters: 1}, true},
{"complete plain text", "猫text", "猫text", 0, embeddedTextBudget{nodes: 32, characters: 5}, false},
} {
t.Run(test.name, func(t *testing.T) {
// These budgets stop before any native child query. No provider
// reference is needed to exercise the actual expansion limits.
got := expandNativeEmbeddedText(nil, test.raw, 0, test.depth, &test.budget)
if got != test.want || test.budget.incomplete != test.incomplete || strings.ContainsRune(got, '\ufffc') {
t.Fatalf("text=%q incomplete=%t", got, test.budget.incomplete)
}
})
}
}
func TestEmbeddedDocumentTextSkipsProtectedAndEditableObjects(t *testing.T) {
for _, snapshot := range []Snapshot{{Role: "password text"}, {Role: "terminal"}, {Role: "entry", Editable: true}} {
line := expandNativeDocumentText(context.Background(), nil, snapshot, DocumentCaretText{Text: "\ufffc", Start: 0, End: 1, CharacterCount: 1})
if line.Text != "\ufffc" || line.RawText != "\ufffc" || line.Expanded {
t.Fatalf("unexpected expansion for %s: %+v", snapshot.Role, line)
}
}
}