Skip to content

Commit acb9c25

Browse files
fix: handle spoken containers that don't have a role (due to alternative reading flow)
1 parent dd87384 commit acb9c25

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

src/flattenTree.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ import type {
33
AccessibilityNodeTree,
44
} from "./createAccessibilityTree";
55
import { getAccessibleAttributeLabels } from "./getNodeAccessibilityData/getAccessibleAttributeLabels";
6-
import { HTMLElementWithValue } from "./getNodeAccessibilityData/getAccessibleValue";
6+
import type { HTMLElementWithValue } from "./getNodeAccessibilityData/getAccessibleValue";
77

88
export const END_OF_ROLE_PREFIX = "end of";
9+
export const END_OF_NO_ROLE_PREFIX = "end";
910

1011
const TEXT_NODE = 3;
1112

@@ -65,17 +66,15 @@ export function flattenTree(
6566

6667
const flattenedTree = ignoreChildren
6768
? []
68-
: [
69-
...children.flatMap((child) =>
70-
flattenTree(container, child, {
71-
...treeNodeWithAttributeLabels,
72-
children,
73-
})
74-
),
75-
];
69+
: children.flatMap((child) =>
70+
flattenTree(container, child, {
71+
...treeNodeWithAttributeLabels,
72+
children,
73+
})
74+
);
7675

7776
const isRoleContainer =
78-
!!flattenedTree.length && !ignoreChildren && !!treeNode.spokenRole;
77+
!!flattenedTree.length && !ignoreChildren && isAnnounced;
7978

8079
if (isAnnounced) {
8180
flattenedTree.unshift(treeNodeWithAttributeLabels);
@@ -84,7 +83,9 @@ export function flattenTree(
8483
if (isRoleContainer) {
8584
flattenedTree.push({
8685
...treeNodeWithAttributeLabels,
87-
spokenRole: `${END_OF_ROLE_PREFIX} ${treeNodeWithAttributeLabels.spokenRole}`,
86+
spokenRole: treeNodeWithAttributeLabels.spokenRole
87+
? `${END_OF_ROLE_PREFIX} ${treeNodeWithAttributeLabels.spokenRole}`
88+
: END_OF_NO_ROLE_PREFIX,
8889
});
8990
}
9091

test/int/ariaFlowTo.int.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,24 @@ describe("Aria Flow To", () => {
2121
await virtual.next();
2222
await virtual.next();
2323
await virtual.next();
24+
await virtual.next();
25+
await virtual.next();
2426
await virtual.perform(
2527
virtual.commands.moveToNextAlternateReadingOrderElement
2628
);
29+
await virtual.next();
2730

2831
expect(await virtual.spokenPhraseLog()).toEqual([
2932
"document",
3033
"3 alternate reading orders, 1 previous alternate reading order",
3134
"apple",
35+
"end, 3 alternate reading orders, 1 previous alternate reading order",
3236
"1 previous alternate reading order",
3337
"banana",
38+
"end, 1 previous alternate reading order",
3439
"1 alternate reading order, 1 previous alternate reading order",
3540
"3 alternate reading orders, 1 previous alternate reading order",
41+
"apple",
3642
]);
3743

3844
await virtual.stop();
@@ -53,6 +59,7 @@ describe("Aria Flow To", () => {
5359
);
5460
await virtual.previous();
5561
await virtual.previous();
62+
await virtual.previous();
5663
await virtual.perform(
5764
virtual.commands.moveToNextAlternateReadingOrderElement,
5865
{ index: 1 }
@@ -61,6 +68,8 @@ describe("Aria Flow To", () => {
6168
await virtual.previous();
6269
await virtual.previous();
6370
await virtual.previous();
71+
await virtual.previous();
72+
await virtual.previous();
6473
await virtual.perform(
6574
virtual.commands.moveToNextAlternateReadingOrderElement,
6675
{ index: 2 }
@@ -71,11 +80,14 @@ describe("Aria Flow To", () => {
7180
"document",
7281
"3 alternate reading orders, 1 previous alternate reading order",
7382
"1 previous alternate reading order",
83+
"end, 3 alternate reading orders, 1 previous alternate reading order",
7484
"apple",
7585
"3 alternate reading orders, 1 previous alternate reading order",
7686
"1 alternate reading order, 1 previous alternate reading order",
87+
"end, 1 previous alternate reading order",
7788
"banana",
7889
"1 previous alternate reading order",
90+
"end, 3 alternate reading orders, 1 previous alternate reading order",
7991
"apple",
8092
"3 alternate reading orders, 1 previous alternate reading order",
8193
"1 previous alternate reading order",

0 commit comments

Comments
 (0)