Skip to content

Commit 847cbd8

Browse files
authored
Normalize whitespace in getAccessibilityTree (#345)
1 parent abe22a6 commit 847cbd8

3 files changed

Lines changed: 35 additions & 14 deletions

File tree

.changeset/fuzzy-pandas-mate.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
'pleasantest': major
3+
---
4+
5+
Normalize whitespace in `getAccessibilityTree`
6+
7+
Now anytime there is contiguous whitespace in text strings it is collapsed into a single space. This matches the behavior of browser accessibility trees.
8+
9+
This is a breaking change because it changes the `getAccessibilityTree` output, and may break your snapshots. Update your snapshots with Jest and review the changes.

src/accessibility/browser.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,8 @@ export const getAccessibilityTree = (
165165
if (node instanceof Element) {
166166
printedChild = getAccessibilityTree(node, opts, requiredOwnedElements);
167167
} else if (includeText && !(node instanceof Comment)) {
168-
const trimmedText = node.nodeValue?.trim();
168+
// Trim whitespace from ends and normalize all whitespace to a single space
169+
const trimmedText = node.nodeValue?.trim().replace(/\s+/g, ' ');
169170
if (!trimmedText) continue;
170171

171172
printedChild = `text "${trimmedText}"`;

tests/accessibility/getAccessibilityTree.test.ts

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,12 @@ test(
6060
listitem
6161
text "something else"
6262
`);
63-
expect(await getAccessibilityTree(page, { includeText: true }))
63+
expect(await getAccessibilityTree(page, { includeText: false }))
6464
.toMatchInlineSnapshot(`
6565
document "pleasantest"
6666
list
6767
listitem
68-
text "something"
6968
listitem
70-
text "something else"
7169
`);
7270
await utils.injectHTML(`
7371
<button aria-describedby="click-me-description">click me</button>
@@ -85,7 +83,7 @@ test(
8583
↳ description: "extended description"
8684
text "extended description"
8785
`);
88-
expect(await getAccessibilityTree(page, { includeText: true }))
86+
expect(await getAccessibilityTree(page, { includeText: false }))
8987
.toMatchInlineSnapshot(`
9088
document "pleasantest"
9189
button "click me"
@@ -94,7 +92,6 @@ test(
9492
↳ description: "extended description"
9593
button "click me"
9694
↳ description: "extended description"
97-
text "extended description"
9895
`);
9996

10097
expect(await getAccessibilityTree(page, { includeDescriptions: false }))
@@ -116,14 +113,28 @@ test(
116113
<input type="text" id="input"/>
117114
`);
118115

119-
expect(await getAccessibilityTree(page, { includeText: true }))
120-
.toMatchInlineSnapshot(`
121-
document "pleasantest"
122-
text "Label Text"
123-
textbox "Label Text"
124-
text "Label Text"
125-
textbox "Label Text"
126-
`);
116+
expect(await getAccessibilityTree(page)).toMatchInlineSnapshot(`
117+
document "pleasantest"
118+
text "Label Text"
119+
textbox "Label Text"
120+
text "Label Text"
121+
textbox "Label Text"
122+
`);
123+
124+
// Make sure whitespace is normalized
125+
await utils.injectHTML(`
126+
<h1>
127+
128+
129+
Hello
130+
world
131+
</h1>
132+
`);
133+
expect(await getAccessibilityTree(page)).toMatchInlineSnapshot(`
134+
document "pleasantest"
135+
heading "Hello world" (level=1)
136+
text "Hello world"
137+
`);
127138
}),
128139
);
129140

0 commit comments

Comments
 (0)