<!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>
