<!DOCTYPE html> <meta charset=utf-8> <title>Restoration of style tests</title> <!-- No spec, based on: https://bugzilla.mozilla.org/show_bug.cgi?id=1250805 If the user presses Ctrl+B and then hits Enter and then types text, the text should still be bold. Hitting Enter shouldn't make it forget. And so too for other commands. --> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <div contenteditable></div> <script> var div = document.querySelector("div"); function doTestInner(cmd, param, startBold) { div.innerHTML = startBold ? "<b>foo</b>bar" : "foobar"; getSelection().collapse(startBold ? div.firstChild.firstChild : div.firstChild, 3); // Set/unset bold, then run command and see if it's still there assert_true(document.execCommand("bold", false, ""), "execCommand needs to return true for bold"); assert_true(document.execCommand(cmd, false, param), "execCommand needs to return true for " + cmd + " " + param); assert_equals(document.queryCommandState("bold"), !startBold, "bold state"); assert_true(document.execCommand("inserttext", false, "x"), "execCommand needs to return true for inserttext x"); // Find the new text node and check that it's actually bold (or not) var node = div; while (node) { if (node.nodeType == Node.TEXT_NODE && node.nodeValue.indexOf("x") != -1) { assert_in_array(getComputedStyle(node.parentNode).fontWeight, !startBold ? ["700", "bold"] : ["400", "normal"], "font-weight"); return; } if (node.firstChild) { node = node.firstChild; continue; } while (node != div && !node.nextSibling) { node = node.parentNode; } if (node == div) { assert_unreached("x not found!"); break; } node = node.nextSibling; } } function doTest(cmd, param) { if (param === undefined) { param = ""; } test(function() { doTestInner(cmd, param, true); }, cmd + " " + param + " starting bold"); test(function() { doTestInner(cmd, param, false); }, cmd + " " + param + " starting not bold"); } doTest("insertparagraph"); doTest("insertlinebreak"); doTest("delete"); doTest("forwarddelete"); doTest("insertorderedlist"); doTest("insertunorderedlist"); doTest("indent"); // Outdent does nothing here, but should be harmless. doTest("outdent"); doTest("justifyleft"); doTest("justifyright"); doTest("justifycenter"); doTest("justifyfull"); doTest("formatblock", "div"); doTest("formatblock", "blockquote"); doTest("inserthorizontalrule"); doTest("insertimage", "a"); doTest("inserttext", "bar"); </script>