| <!doctype html> |
| <meta charset=utf-8> |
| <title>Editor should not create unnecessary text nodes</title> |
| <script src=/resources/testharness.js></script> |
| <script src=/resources/testharnessreport.js></script> |
| <div contenteditable></div> |
| <script> |
| var div = document.querySelector("div"); |
| var walker = document.createTreeWalker(div, NodeFilter.SHOW_TEXT); |
| function testInput(html, callback, desc) { |
| test(() => { |
| div.innerHTML = html; |
| div.focus(); |
| callback(); |
| |
| walker.currentNode = walker.root; |
| var node; |
| while (node = walker.nextNode()) { |
| if (node.nextSibling) { |
| assert_not_equals(node.nextSibling.nodeType, Node.TEXT_NODE, |
| 'text node "' + node.nodeValue + '" is next to "' + |
| node.nextSibling.nodeValue + '"'); |
| } |
| } |
| }, desc); |
| } |
| |
| [ |
| ['<img src="#">foo<img src="#">', |
| () => { |
| getSelection().collapse(div, 1); |
| document.execCommand("inserttext", false, "x"); |
| }, |
| "Simple insertText"], |
| ['<p>editor</p>', |
| () => { |
| getSelection().collapse(div.firstChild.firstChild, 3); |
| document.execCommand("insertlinebreak", false, ""); |
| document.execCommand("inserttext", false, "x"); |
| }, |
| "insertText after insertLineBreak"], |
| ].forEach(([a, b, c]) => testInput(a, b, c)); |
| </script> |