Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(872)

Side by Side Diff: LayoutTests/inspector-protocol/accessibility/accessibility-ignoredNodesTest.js

Issue 1076453004: Show reasons why nodes are ignored in accessibility sidebar (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: pfeldman review comments (take 3) Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 function initialize_IgnoredNodesTests() {
6 InspectorTest.dumpAccessibilityNodesByIdrefAndCompleteTest = function(ids, msg)
7 {
8 if (msg.error) {
9 InspectorTest.log(msg.error.message);
10 InspectorTest.completeTest();
11 return;
12 }
13
14
15 var rootNode = msg.result.root;
16 var promises = [];
17 for (var id of ids) {
18 var selector = "#" + id;
19 var promise = InspectorTest._sendQuerySelector(rootNode.nodeId, selector )
20 .then(InspectorTest._getAXNode)
21 .then(InspectorTest._rewriteNodes)
22 .then(InspectorTest._dumpNode.bind(null, selector))
23 .catch(function(msg) {
24 InspectorTest.log("Error: " + JSON.stringify(msg));
25 })
26 promises.push(promise);
27 }
28
29 Promise.all(promises).then(function() { InspectorTest.completeTest(); });
30 }
31
32 InspectorTest._sendCommandPromise = function(command, params)
33 {
34 return new Promise(function(resolve, reject) {
35 InspectorTest.sendCommand(command, params, function(msg) {
36 if (msg.error)
37 reject(msg.error); return;
38
39 resolve(msg);
40 })
41 });
42 }
43
44
45 InspectorTest._sendQuerySelector = function(nodeId, selector)
46 {
47 return InspectorTest._sendCommandPromise("DOM.querySelector", { "nodeId": no deId, "selector": selector });
48 }
49
50 InspectorTest._getAXNode = function(msg)
51 {
52 var node = msg.result;
53 return InspectorTest._sendCommandPromise("Accessibility.getAXNode", { "nodeI d": node.nodeId });
54 }
55
56 InspectorTest._describeNode = function(nodeData)
57 {
58 var description = nodeData.nodeName.toLowerCase();
59 switch (nodeData.nodeType) {
60 case Node.ELEMENT_NODE:
61 var p = nodeData.attributes.indexOf("id");
62 if (p >= 0)
63 description += "#" + nodeData.attributes[p + 1];
64 }
65 return description;
66 }
67
68 InspectorTest._rewriteNode = function(relatedNode)
69 {
70 function rewriteNodePromise(resolve, reject)
71 {
72 if (!("backendNodeId" in relatedNode)) {
73 reject("Could not find backendNodeId in " + JSON.stringify(relatedNo de));
74 return;
75 }
76 var backendNodeId = relatedNode.backendNodeId;
77
78 function onNodeResolved(backendNodeId, message)
79 {
80 var nodeId = message.result.nodeIds[0];
81 if (!(nodeId in nodeInfo)) {
82 relatedNode.nodeResult = "[NODE NOT FOUND]";
83 resolve();
84 return;
85 }
86 var node = nodeInfo[nodeId];
87 delete relatedNode.backendNodeId;
88 relatedNode.nodeResult = InspectorTest._describeNode(node);
89 resolve();
90 }
91 InspectorTest.sendCommand("DOM.pushNodesByBackendIdsToFrontend", { "back endNodeIds": [ backendNodeId ] }, onNodeResolved.bind(null, backendNodeId));
92 }
93 return new Promise(rewriteNodePromise);
94 }
95
96 InspectorTest._checkExists = function(path, obj, reject)
97 {
98 var pathComponents = path.split(".");
99 var currentPath = [];
100 var currentObject = obj;
101 for (var component of pathComponents) {
102 currentPath.push(component);
103 if (!(component in currentObject)) {
104 reject("Could not find " + currentPath.join(".") + " in " + JSON.str ingify(obj, null, " "));
105 return false;
106 }
107 currentObject = currentObject[component];
108 }
109 return true;
110 }
111
112 InspectorTest._check = function(condition, errorMsg, obj, reject)
113 {
114 if (condition)
115 return true;
116 reject(errorMsg + " in " + JSON.stringify(obj, null, " "));
117 }
118
119 InspectorTest._rewriteNodes = function(msg)
120 {
121 function rewriteNodesPromise(resolve, reject)
122 {
123 if (msg.error) {
124 reject(msg.error.message);
125 return;
126 }
127
128 if (msg.result.accessibilityNode.ignored) {
129 InspectorTest._checkExists("result.accessibilityNode.ignoredReasons" , msg);
130 var properties = msg.result.accessibilityNode.ignoredReasons;
131 } else {
132 InspectorTest._checkExists("result.accessibilityNode.properties", ms g);
133 var properties = msg.result.accessibilityNode.properties;
134 }
135 var promises = [];
136 for (var property of properties) {
137 if (property.value.type === "idrefList") {
138 if (!InspectorTest._checkExists("value.relatedNodeArrayValue", p roperty, reject))
139 return;
140 var relatedNodeArray = property.value.relatedNodeArrayValue;
141 InspectorTest._check(Array.isArray(relatedNodeArray), "value.rel atedNodeArrayValue should be an array", JSON.stringify(property), reject);
142 for (var relatedNode of relatedNodeArray) {
143 promises.push(InspectorTest._rewriteNode(relatedNode));
144 }
145 } else if (property.value.type === "idref") {
146 if (!InspectorTest._checkExists("value.relatedNodeValue", proper ty, reject))
147 return;
148 var relatedNode = property.value.relatedNodeValue;
149 promises.push(InspectorTest._rewriteNode(relatedNode));
150 }
151 }
152
153 Promise.all(promises).then(resolve(msg));
154 }
155 return new Promise(rewriteNodesPromise);
156 }
157
158 InspectorTest._dumpNode = function(selector, msg)
159 {
160 function stripIds(key, value)
161 {
162 if (key == "id")
163 return "<int>"
164 if (key == "backendNodeId")
165 return "<string>"
166 if (key == "nodeId")
167 return "<string>"
168 return value;
169 }
170 InspectorTest.log(selector + ": " + JSON.stringify(msg, stripIds, " "));
171 }
172 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698