Skip to content
This repository was archived by the owner on Sep 21, 2021. It is now read-only.

Commit eb547c2

Browse files
committed
Tree's aria-level should be depth + 1 (according to spec values should be >= 1).
Fixes #963.
1 parent 4f98ccd commit eb547c2

3 files changed

Lines changed: 32 additions & 11 deletions

File tree

packages/devtools-components/src/tests/tree.js

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,38 @@ describe("Tree", () => {
7272

7373
it("is accessible", () => {
7474
const wrapper = mountTree({
75-
expanded: new Set("ABCDEFGHIJKLMNO".split("")),
75+
expanded: new Set("ABCDEFGHIJMN".split("")),
7676
});
7777
expect(wrapper.getDOMNode().getAttribute("role")).toBe("tree");
7878
expect(wrapper.getDOMNode().getAttribute("tabIndex")).toBe("0");
7979

80-
getTreeNodes(wrapper)
81-
.everyWhere(node => expect(
82-
node.prop("id").startsWith("key-")
83-
&& node.prop("role") === "treeitem"
84-
&& typeof node.prop("aria-level") !== "undefined"
85-
).toBe(true));
80+
const expected = {
81+
"A": {id: "key-A", level: 1, expanded: true},
82+
"B": {id: "key-B", level: 2, expanded: true},
83+
"C": {id: "key-C", level: 2, expanded: true},
84+
"D": {id: "key-D", level: 2, expanded: true},
85+
"E": {id: "key-E", level: 3, expanded: true},
86+
"F": {id: "key-F", level: 3, expanded: true},
87+
"G": {id: "key-G", level: 3, expanded: true},
88+
"H": {id: "key-H", level: 3, expanded: true},
89+
"I": {id: "key-I", level: 3, expanded: true},
90+
"J": {id: "key-J", level: 3, expanded: true},
91+
"K": {id: "key-K", level: 4, expanded: undefined},
92+
"L": {id: "key-L", level: 4, expanded: undefined},
93+
"M": {id: "key-M", level: 1, expanded: true},
94+
"N": {id: "key-N", level: 2, expanded: true},
95+
"O": {id: "key-O", level: 3, expanded: undefined},
96+
};
97+
98+
getTreeNodes(wrapper).forEach(node => {
99+
const key = node.prop("id").replace("key-", "");
100+
const item = expected[key];
101+
102+
expect(node.prop("id")).toBe(item.id);
103+
expect(node.prop("role")).toBe("treeitem");
104+
expect(node.prop("aria-level")).toBe(item.level);
105+
expect(node.prop("aria-expanded")).toBe(item.expanded);
106+
});
86107
});
87108

88109
it("renders as expected", () => {
@@ -439,8 +460,8 @@ function simulateKeyDown(wrapper, key) {
439460
function formatTree(wrapper) {
440461
return getTreeNodes(wrapper)
441462
.map((node) => {
442-
const level = node.prop("aria-level");
443-
const indentStr = "| ".repeat(level || 0);
463+
const level = (node.prop("aria-level") || 1) - 1;
464+
const indentStr = "| ".repeat(level);
444465
const arrow = node.find("i.arrow");
445466
let arrowStr = " ";
446467
if (arrow.exists()) {

packages/devtools-components/src/tree.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949

5050
/* For non expandable root nodes, we don't have .tree-indent elements, so we declare
5151
the margin on the start of the node */
52-
.tree-node[data-expandable="false"][aria-level="0"] {
52+
.tree-node[data-expandable="false"][aria-level="1"] {
5353
padding-inline-start: 15px
5454
}
5555

packages/devtools-components/src/tree.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class TreeNode extends Component {
102102
className: "tree-node" + (focused ? " focused" : ""),
103103
onClick: this.props.onClick,
104104
role: "treeitem",
105-
"aria-level": depth,
105+
"aria-level": depth + 1,
106106
"aria-expanded": ariaExpanded,
107107
"data-expandable": this.props.isExpandable
108108
},

0 commit comments

Comments
 (0)