Fixed character/word navigation inside links.

This commit is contained in:
Storm Dragon committed 2026-10-18 23:43:16 -04:00
1 parent 396efbd7c5
commit ab14244404
12 files changed
+213 -12

No files matched your search

+29
View File
@@ -60,6 +60,12 @@ func TestNativeBrowserNamedLinks(t *testing.T) {
text string
}{
{review.CaretNextLine, "Example Game 2 copies"},
{review.CaretNextCharacter, "x"},
{review.CaretPreviousCharacter, "E"},
{review.CaretNextWord, "Example"},
{review.CaretNextWord, "Game"},
{review.CaretLineEnd, "s"},
{review.CaretLineStart, "E"},
{review.CaretNextLine, "Ordinary multiline link"},
{review.CaretNextCharacter, "r"},
{review.CaretNextWord, "Ordinary"},
@@ -101,7 +107,12 @@ func TestNativeBrowserNamedLinks(t *testing.T) {
t.Fatal(err)
}
var username, emoji atspi.ObjectReference
var labelOnly atspi.ObjectReference
for _, node := range document.Nodes {
if node.Snapshot.Role == "link" && node.Snapshot.Name == "Example Info Page" {
labelOnly = node.Reference
t.Logf("label-only native link: explicit=%t count=%d children=%d", node.Snapshot.ExplicitName, node.Snapshot.CharacterCount, len(node.Children))
}
if node.Snapshot.Role != "static" {
continue
}
@@ -112,6 +123,24 @@ func TestNativeBrowserNamedLinks(t *testing.T) {
emoji = node.Reference
}
}
if !labelOnly.Valid() {
t.Fatal("label-only link missing")
}
if _, err := cursor.SyncFocus(ctx, labelOnly.ID()); err != nil {
t.Fatal(err)
}
for _, want := range []rune("xample Info Page.") {
move, err := cursor.MoveCaret(ctx, adapter, review.CaretNextCharacter)
if err != nil || !move.Moved || move.Text != string(want) {
t.Fatalf("label-only character: %+v, %v; want %q", move, err, want)
}
}
for _, want := range []rune("egaP ofnI elpmaxE") {
move, err := cursor.MoveCaret(ctx, adapter, review.CaretPreviousCharacter)
if err != nil || !move.Moved || move.Text != string(want) {
t.Fatalf("reverse label-only character: %+v, %v; want %q", move, err, want)
}
}
if !username.Valid() || !emoji.Valid() {
t.Fatal("separate display-name and emoji text objects missing")
}