| OLD | NEW |
| 1 <html> | 1 <html> |
| 2 <head> | 2 <head> |
| 3 <script src="../../http/tests/inspector/inspector-test.js"></script> | 3 <script src="../../http/tests/inspector/inspector-test.js"></script> |
| 4 <script src="../../http/tests/inspector/elements-test.js"></script> | 4 <script src="../../http/tests/inspector/elements-test.js"></script> |
| 5 <script src="edit-dom-test.js"></script> |
| 5 <script> | 6 <script> |
| 6 | 7 |
| 7 function test() | 8 function test() |
| 8 { | 9 { |
| 9 // Save time on style updates. | 10 // Save time on style updates. |
| 10 WebInspector.inspectorView.showPanel("elements"); | 11 WebInspector.inspectorView.showPanel("elements"); |
| 11 WebInspector.StylesSidebarPane.prototype.update = function() {}; | 12 WebInspector.StylesSidebarPane.prototype.update = function() {}; |
| 12 WebInspector.MetricsSidebarPane.prototype.update = function() {}; | 13 WebInspector.MetricsSidebarPane.prototype.update = function() {}; |
| 13 | 14 |
| 14 InspectorTest.runTestSuite([ | 15 InspectorTest.runTestSuite([ |
| 15 function testSetUp(next) | 16 function testSetUp(next) |
| 16 { | 17 { |
| 17 InspectorTest.expandElementsTree(next); | 18 InspectorTest.expandElementsTree(next); |
| 18 }, | 19 }, |
| 19 | 20 |
| 20 function testRemove(next) | 21 function testRemove(next) |
| 21 { | 22 { |
| 22 domActionTestForNodeId("testRemove", "node-to-remove", testBody, nex
t); | 23 InspectorTest.domActionTestForNodeId("testRemove", "node-to-remove",
testBody, next); |
| 23 | 24 |
| 24 function testBody(node, done) | 25 function testBody(node, done) |
| 25 { | 26 { |
| 26 var treeElement = WebInspector.panels.elements.treeOutline.findT
reeElement(node); | 27 var treeElement = WebInspector.panels.elements.treeOutline.findT
reeElement(node); |
| 27 treeElement.remove(); | 28 treeElement.remove(); |
| 28 InspectorTest.runAfterPendingDispatches(done); | 29 InspectorTest.runAfterPendingDispatches(done); |
| 29 } | 30 } |
| 30 }, | 31 }, |
| 31 | 32 |
| 32 function testSetNodeName(next) | 33 function testSetNodeName(next) |
| 33 { | 34 { |
| 34 domActionTestForNodeId("testSetNodeName", "node-to-set-name", testBo
dy, next); | 35 InspectorTest.domActionTestForNodeId("testSetNodeName", "node-to-set
-name", testBody, next); |
| 35 | 36 |
| 36 function testBody(node, done) | 37 function testBody(node, done) |
| 37 { | 38 { |
| 38 editNodePartAndRun(node, "webkit-html-tag-name", "span", done); | 39 InspectorTest.editNodePartAndRun(node, "webkit-html-tag-name", "
span", done); |
| 39 } | 40 } |
| 40 }, | 41 }, |
| 41 | 42 |
| 42 function testSetNodeNameInput(next) | 43 function testSetNodeNameInput(next) |
| 43 { | 44 { |
| 44 domActionTestForNodeId("testSetNodeNameInput", "node-to-set-name-inp
ut", testBody, next); | 45 InspectorTest.domActionTestForNodeId("testSetNodeNameInput", "node-t
o-set-name-input", testBody, next); |
| 45 | 46 |
| 46 function testBody(node, done) | 47 function testBody(node, done) |
| 47 { | 48 { |
| 48 editNodePartAndRun(node, "webkit-html-tag-name", "input", done); | 49 InspectorTest.editNodePartAndRun(node, "webkit-html-tag-name", "
input", done); |
| 49 } | 50 } |
| 50 }, | 51 }, |
| 51 | 52 |
| 52 function testSetNodeValue(next) | 53 function testSetNodeValue(next) |
| 53 { | 54 { |
| 54 domActionTestForNodeId("testSetNodeValue", "node-to-set-value", test
Body, next); | 55 InspectorTest.domActionTestForNodeId("testSetNodeValue", "node-to-se
t-value", testBody, next); |
| 55 | 56 |
| 56 function testBody(node, done) | 57 function testBody(node, done) |
| 57 { | 58 { |
| 58 editNodePartAndRun(node, "webkit-html-text-node", " \n Edited
Text \n ", done); | 59 InspectorTest.editNodePartAndRun(node, "webkit-html-text-node",
" \n Edited Text \n ", done); |
| 59 } | 60 } |
| 60 }, | 61 }, |
| 61 | 62 |
| 62 function testSetAttribute(next) | 63 function testSetAttribute(next) |
| 63 { | 64 { |
| 64 domActionTestForNodeId("testSetAttribute", "node-to-set-attribute",
testBody, next); | 65 InspectorTest.domActionTestForNodeId("testSetAttribute", "node-to-se
t-attribute", testBody, next); |
| 65 | 66 |
| 66 function testBody(node, done) | 67 function testBody(node, done) |
| 67 { | 68 { |
| 68 editNodePartAndRun(node, "webkit-html-attribute", "bar=\"edited
attribute\"", done, true); | 69 InspectorTest.editNodePartAndRun(node, "webkit-html-attribute",
"bar=\"edited attribute\"", done, true); |
| 69 } | 70 } |
| 70 }, | 71 }, |
| 71 | 72 |
| 72 function testSetScriptableAttribute(next) | 73 function testSetScriptableAttribute(next) |
| 73 { | 74 { |
| 74 domActionTestForNodeId("testSetScriptableAttribute", "node-to-set-sc
riptable-attribute", testBody, next); | 75 InspectorTest.domActionTestForNodeId("testSetScriptableAttribute", "
node-to-set-scriptable-attribute", testBody, next); |
| 75 | 76 |
| 76 function testBody(node, done) | 77 function testBody(node, done) |
| 77 { | 78 { |
| 78 editNodePartAndRun(node, "webkit-html-attribute", "onclick=\"ale
rt(2)\"", done, true); | 79 InspectorTest.editNodePartAndRun(node, "webkit-html-attribute",
"onclick=\"alert(2)\"", done, true); |
| 79 } | 80 } |
| 80 }, | 81 }, |
| 81 | 82 |
| 82 function testRemoveAttribute(next) | 83 function testRemoveAttribute(next) |
| 83 { | 84 { |
| 84 domActionTestForNodeId("testRemoveAttribute", "node-to-remove-attrib
ute", testBody, next); | 85 InspectorTest.domActionTestForNodeId("testRemoveAttribute", "node-to
-remove-attribute", testBody, next); |
| 85 | 86 |
| 86 function testBody(node, done) | 87 function testBody(node, done) |
| 87 { | 88 { |
| 88 editNodePartAndRun(node, "webkit-html-attribute", "", done, true
); | 89 InspectorTest.editNodePartAndRun(node, "webkit-html-attribute",
"", done, true); |
| 89 } | 90 } |
| 90 }, | 91 }, |
| 91 | 92 |
| 92 function testAddAttribute(next) | 93 function testAddAttribute(next) |
| 93 { | 94 { |
| 94 doAddAttribute("testAddAttribute", "node-to-add-attribute", "newattr
=\"new-value\"", next); | 95 InspectorTest.doAddAttribute("testAddAttribute", "node-to-add-attrib
ute", "newattr=\"new-value\"", next); |
| 95 }, | 96 }, |
| 96 | 97 |
| 97 function testAddAttributeUnquotedValue(next) | 98 function testAddAttributeUnquotedValue(next) |
| 98 { | 99 { |
| 99 doAddAttribute("testAddAttributeUnquotedValue", "node-to-add-attribu
te-unquoted-value", "newattr=unquotedValue", next); | 100 InspectorTest.doAddAttribute("testAddAttributeUnquotedValue", "node-
to-add-attribute-unquoted-value", "newattr=unquotedValue", next); |
| 100 }, | 101 }, |
| 101 | 102 |
| 102 function testEditCommentAsHTML(next) | 103 function testEditCommentAsHTML(next) |
| 103 { | 104 { |
| 104 function commentNodeSelectionCallback(testNode, callback) | 105 function commentNodeSelectionCallback(testNode, callback) |
| 105 { | 106 { |
| 106 var childNodes = testNode.children(); | 107 var childNodes = testNode.children(); |
| 107 for (var i = 0; i < childNodes.length; ++i) { | 108 for (var i = 0; i < childNodes.length; ++i) { |
| 108 if (childNodes[i].nodeType() === 8) { | 109 if (childNodes[i].nodeType() === 8) { |
| 109 WebInspector.Revealer.reveal(childNodes[i]); | 110 WebInspector.Revealer.reveal(childNodes[i]); |
| 110 callback(childNodes[i]); | 111 callback(childNodes[i]); |
| 111 return; | 112 return; |
| 112 } | 113 } |
| 113 } | 114 } |
| 114 InspectorTest.addResult("Comment node not found"); | 115 InspectorTest.addResult("Comment node not found"); |
| 115 InspectorTest.completeTest(); | 116 InspectorTest.completeTest(); |
| 116 } | 117 } |
| 117 domActionTest("testEditCommentAsHTML", commentNodeSelectionCallback,
testBody, next); | 118 InspectorTest.domActionTest("testEditCommentAsHTML", commentNodeSele
ctionCallback, testBody, next); |
| 118 | 119 |
| 119 function testBody(node, done) | 120 function testBody(node, done) |
| 120 { | 121 { |
| 121 var treeElement = WebInspector.panels.elements.treeOutline.findT
reeElement(node); | 122 var treeElement = WebInspector.panels.elements.treeOutline.findT
reeElement(node); |
| 122 treeElement._editAsHTML(); | 123 treeElement._editAsHTML(); |
| 123 InspectorTest.runAfterPendingDispatches(step2); | 124 InspectorTest.runAfterPendingDispatches(step2); |
| 124 | 125 |
| 125 function step2() | 126 function step2() |
| 126 { | 127 { |
| 127 InspectorTest.addResult(treeElement._editing.codeMirror.getV
alue()); | 128 InspectorTest.addResult(treeElement._editing.codeMirror.getV
alue()); |
| 128 treeElement._editing.codeMirror.setValue("<div foo=\"bar-com
ment\">Element</div>"); | 129 treeElement._editing.codeMirror.setValue("<div foo=\"bar-com
ment\">Element</div>"); |
| 129 var event = InspectorTest.createKeyEvent("Enter"); | 130 var event = InspectorTest.createKeyEvent("Enter"); |
| 130 event.isMetaOrCtrlForTest = true; | 131 event.isMetaOrCtrlForTest = true; |
| 131 treeElement._htmlEditElement.dispatchEvent(event); | 132 treeElement._htmlEditElement.dispatchEvent(event); |
| 132 InspectorTest.runAfterPendingDispatches(done); | 133 InspectorTest.runAfterPendingDispatches(done); |
| 133 } | 134 } |
| 134 } | 135 } |
| 135 }, | 136 }, |
| 136 | 137 |
| 137 function testEditAsHTML(next) | 138 function testEditAsHTML(next) |
| 138 { | 139 { |
| 139 domActionTestForNodeId("testEditAsHTML", "node-to-edit-as-html", tes
tBody, next); | 140 InspectorTest.domActionTestForNodeId("testEditAsHTML", "node-to-edit
-as-html", testBody, next); |
| 140 | 141 |
| 141 function testBody(node, done) | 142 function testBody(node, done) |
| 142 { | 143 { |
| 143 var treeElement = WebInspector.panels.elements.treeOutline.findT
reeElement(node); | 144 var treeElement = WebInspector.panels.elements.treeOutline.findT
reeElement(node); |
| 144 treeElement._editAsHTML(); | 145 treeElement._editAsHTML(); |
| 145 InspectorTest.runAfterPendingDispatches(step2); | 146 InspectorTest.runAfterPendingDispatches(step2); |
| 146 | 147 |
| 147 function step2() | 148 function step2() |
| 148 { | 149 { |
| 149 InspectorTest.addResult(treeElement._editing.codeMirror.getV
alue()); | 150 InspectorTest.addResult(treeElement._editing.codeMirror.getV
alue()); |
| 150 treeElement._editing.codeMirror.setValue("<span foo=\"bar\">
<span id=\"inner-span\">Span contents</span></span>"); | 151 treeElement._editing.codeMirror.setValue("<span foo=\"bar\">
<span id=\"inner-span\">Span contents</span></span>"); |
| 151 var event = InspectorTest.createKeyEvent("Enter"); | 152 var event = InspectorTest.createKeyEvent("Enter"); |
| 152 event.isMetaOrCtrlForTest = true; | 153 event.isMetaOrCtrlForTest = true; |
| 153 treeElement._htmlEditElement.dispatchEvent(event); | 154 treeElement._htmlEditElement.dispatchEvent(event); |
| 154 InspectorTest.runAfterPendingDispatches(InspectorTest.expand
ElementsTree.bind(InspectorTest, done)); | 155 InspectorTest.runAfterPendingDispatches(InspectorTest.expand
ElementsTree.bind(InspectorTest, done)); |
| 155 } | 156 } |
| 156 } | 157 } |
| 157 }, | 158 }, |
| 158 | 159 |
| 159 function testEditInvisibleCharsAsHTML(next) | 160 function testEditInvisibleCharsAsHTML(next) |
| 160 { | 161 { |
| 161 domActionTestForNodeId("testEditInvisibleCharsAsHTML", "node-with-in
visible-chars", testBody, next); | 162 InspectorTest.domActionTestForNodeId("testEditInvisibleCharsAsHTML",
"node-with-invisible-chars", testBody, next); |
| 162 | 163 |
| 163 function testBody(node, done) | 164 function testBody(node, done) |
| 164 { | 165 { |
| 165 var treeElement = WebInspector.panels.elements.treeOutline.findT
reeElement(node); | 166 var treeElement = WebInspector.panels.elements.treeOutline.findT
reeElement(node); |
| 166 treeElement._editAsHTML(); | 167 treeElement._editAsHTML(); |
| 167 InspectorTest.runAfterPendingDispatches(step2); | 168 InspectorTest.runAfterPendingDispatches(step2); |
| 168 | 169 |
| 169 function step2() | 170 function step2() |
| 170 { | 171 { |
| 171 var codeMirror = treeElement._editing.codeMirror; | 172 var codeMirror = treeElement._editing.codeMirror; |
| 172 InspectorTest.addResult(codeMirror.getValue()); | 173 InspectorTest.addResult(codeMirror.getValue()); |
| 173 codeMirror.setValue(codeMirror.getValue().replace(/&/g, '#')
); | 174 codeMirror.setValue(codeMirror.getValue().replace(/&/g, '#')
); |
| 174 var event = InspectorTest.createKeyEvent("Enter"); | 175 var event = InspectorTest.createKeyEvent("Enter"); |
| 175 event.isMetaOrCtrlForTest = true; | 176 event.isMetaOrCtrlForTest = true; |
| 176 treeElement._htmlEditElement.dispatchEvent(event); | 177 treeElement._htmlEditElement.dispatchEvent(event); |
| 177 InspectorTest.runAfterPendingDispatches(InspectorTest.expand
ElementsTree.bind(InspectorTest, done)); | 178 InspectorTest.runAfterPendingDispatches(InspectorTest.expand
ElementsTree.bind(InspectorTest, done)); |
| 178 } | 179 } |
| 179 } | 180 } |
| 180 }, | 181 }, |
| 181 | 182 |
| 182 function testEditScript(next) | 183 function testEditScript(next) |
| 183 { | 184 { |
| 184 domActionTestForNodeId("testEditScript", "node-to-edit-script", test
Body, next); | 185 InspectorTest.domActionTestForNodeId("testEditScript", "node-to-edit
-script", testBody, next); |
| 185 | 186 |
| 186 function testBody(node, done) | 187 function testBody(node, done) |
| 187 { | 188 { |
| 188 editNodePartAndRun(node, "webkit-html-text-node", "\n var i =
0;\n var j = 0;\n", done); | 189 InspectorTest.editNodePartAndRun(node, "webkit-html-text-node",
"\n var i = 0;\n var j = 0;\n", done); |
| 189 } | |
| 190 }, | |
| 191 | |
| 192 function testEditShadowDOMAsHTML(next) | |
| 193 { | |
| 194 domActionTestForNodeId("testEditAuthorShadowDOMAsHTML", "authorShado
wDOMElement", testBody, next); | |
| 195 | |
| 196 function testBody(node, done) | |
| 197 { | |
| 198 var treeElement = WebInspector.panels.elements.treeOutline.findT
reeElement(node); | |
| 199 treeElement._editAsHTML(); | |
| 200 InspectorTest.runAfterPendingDispatches(step2); | |
| 201 | |
| 202 function step2() | |
| 203 { | |
| 204 InspectorTest.addResult(treeElement._editing.codeMirror.getV
alue()); | |
| 205 treeElement._editing.codeMirror.setValue("<span foo=\"shadow
-span\"><span id=\"inner-shadow-span\">Shadow span contents</span></span>"); | |
| 206 var event = InspectorTest.createKeyEvent("Enter"); | |
| 207 event.isMetaOrCtrlForTest = true; | |
| 208 treeElement._htmlEditElement.dispatchEvent(event); | |
| 209 InspectorTest.runAfterPendingDispatches(InspectorTest.expand
ElementsTree.bind(InspectorTest, done)); | |
| 210 } | |
| 211 } | 190 } |
| 212 } | 191 } |
| 213 ]); | 192 ]); |
| 214 | |
| 215 function doAddAttribute(testName, dataNodeId, attributeText, next) | |
| 216 { | |
| 217 domActionTestForNodeId(testName, dataNodeId, testBody, next); | |
| 218 | |
| 219 function testBody(node, done) | |
| 220 { | |
| 221 var editorElement = editNodePart(node, "webkit-html-attribute"); | |
| 222 editorElement.dispatchEvent(InspectorTest.createKeyEvent("U+0009"));
// Tab | |
| 223 | |
| 224 InspectorTest.runAfterPendingDispatches(testContinuation); | |
| 225 | |
| 226 function testContinuation() | |
| 227 { | |
| 228 var editorElement = window.getSelection().anchorNode.parentEleme
nt; | |
| 229 editorElement.textContent = attributeText; | |
| 230 editorElement.dispatchEvent(InspectorTest.createKeyEvent("Enter"
)); | |
| 231 InspectorTest.addSniffer(WebInspector.ElementsTreeUpdater.protot
ype, "_updateModifiedNodes", done); | |
| 232 } | |
| 233 } | |
| 234 } | |
| 235 | |
| 236 function domActionTestForNodeId(testName, dataNodeId, testBody, next) | |
| 237 { | |
| 238 function callback(testNode, continuation) | |
| 239 { | |
| 240 InspectorTest.selectNodeWithId(dataNodeId, continuation); | |
| 241 } | |
| 242 domActionTest(testName, callback, testBody, next); | |
| 243 } | |
| 244 | |
| 245 function domActionTest(testName, dataNodeSelectionCallback, testBody, next) | |
| 246 { | |
| 247 var testNode = InspectorTest.expandedNodeWithId(testName); | |
| 248 InspectorTest.addResult("==== before ===="); | |
| 249 InspectorTest.dumpElementsTree(testNode); | |
| 250 | |
| 251 dataNodeSelectionCallback(testNode, step0); | |
| 252 | |
| 253 function step0(node) | |
| 254 { | |
| 255 InspectorTest.runAfterPendingDispatches(step1.bind(null, node)); | |
| 256 } | |
| 257 | |
| 258 function step1(node) | |
| 259 { | |
| 260 testBody(node, step2); | |
| 261 } | |
| 262 | |
| 263 function step2() | |
| 264 { | |
| 265 InspectorTest.addResult("==== after ===="); | |
| 266 InspectorTest.dumpElementsTree(testNode); | |
| 267 next(); | |
| 268 } | |
| 269 } | |
| 270 | |
| 271 function editNodePart(node, className) | |
| 272 { | |
| 273 var treeElement = WebInspector.panels.elements.treeOutline.findTreeEleme
nt(node); | |
| 274 var textElement = treeElement.listItemElement.getElementsByClassName(cla
ssName)[0]; | |
| 275 if (!textElement && treeElement.childrenListElement) | |
| 276 textElement = treeElement.childrenListElement.getElementsByClassName
(className)[0]; | |
| 277 treeElement._startEditingTarget(textElement); | |
| 278 return textElement; | |
| 279 } | |
| 280 | |
| 281 function editNodePartAndRun(node, className, newValue, step2, useSniffer) | |
| 282 { | |
| 283 var editorElement = editNodePart(node, className); | |
| 284 editorElement.textContent = newValue; | |
| 285 editorElement.dispatchEvent(InspectorTest.createKeyEvent("Enter")); | |
| 286 if (useSniffer) | |
| 287 InspectorTest.addSniffer(WebInspector.ElementsTreeUpdater.prototype,
"_updateModifiedNodes", step2); | |
| 288 else | |
| 289 InspectorTest.runAfterPendingDispatches(step2); | |
| 290 } | |
| 291 } | 193 } |
| 292 | 194 |
| 293 </script> | 195 </script> |
| 294 </head> | 196 </head> |
| 295 | 197 |
| 296 <body onload="runTest()"> | 198 <body onload="runTest()"> |
| 297 <p> | 199 <p> |
| 298 Tests that user can mutate DOM by means of elements panel. | 200 Tests that user can mutate DOM by means of elements panel. |
| 299 </p> | 201 </p> |
| 300 | 202 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 for (; i < j; ++i) { | 255 for (; i < j; ++i) { |
| 354 // Do nothing. | 256 // Do nothing. |
| 355 } | 257 } |
| 356 | 258 |
| 357 </script> | 259 </script> |
| 358 </div> | 260 </div> |
| 359 | 261 |
| 360 <div id="testEditCommentAsHTML"> | 262 <div id="testEditCommentAsHTML"> |
| 361 <!-- Comment --> | 263 <!-- Comment --> |
| 362 </div> | 264 </div> |
| 363 | |
| 364 <div id="testEditAuthorShadowDOMAsHTML" /> | |
| 365 </div> | 265 </div> |
| 366 <script> | |
| 367 var container = document.getElementById("testEditAuthorShadowDOMAsHTML"); | |
| 368 var root = container.createShadowRoot(); | |
| 369 root.innerHTML = "<div id='authorShadowDOMElement'></div>"; | |
| 370 </script> | |
| 371 </body> | 266 </body> |
| 372 </html> | 267 </html> |
| OLD | NEW |