42 lines
1.8 KiB
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)
|
|
}
|
|
}
|
|
}
|