| <p>This test tries to indent lines within pre tags. This test passes if it |
| does not crash.</p> |
| <div contentEditable> |
| <pre id="pre-basic">line one |
| line two |
| line three |
| line four</pre> |
| |
| <ul><li><pre id="pre-list">list one |
| list two |
| list three |
| list four |
| </pre></li></ul> |
| |
| <table> |
| <tr><td><pre id="pre-table">table one |
| table two |
| table three</pre></td><td>right cell</td></tr></table> |
| |
| <div id="results">FAILED</div> |
| </div> |
| |
| <a href="javascript:document.execCommand('indent')">indent</a> |
| <a href="javascript:document.execCommand('outdent')">outdent</a> |
| <script src="../../resources/dump-as-markup.js"></script> |
| <script src="../editing.js"></script> |
| <script> |
| function setSelection(node) |
| { |
| var textNode = node.firstChild; |
| if (textNode.nodeType != Node.TEXT_NODE) |
| throw "Wrong node type: " + textNode; |
| execSetSelectionCommand(textNode, 0, 0); |
| } |
| |
| function verifyTextSelection(startNode, startOffset, endNode, endOffset) |
| { |
| if (startNode.nodeType != Node.TEXT_NODE) |
| console.log("Wrong start node type: " + startNode); |
| if (endNode.nodeType != Node.TEXT_NODE) |
| console.log("Wrong end node type: " + endNode); |
| var sel = window.getSelection(); |
| if (sel.anchorNode != startNode || sel.focusNode != endNode) |
| console.log("Wrong node selected."); |
| if (sel.anchorOffset != startOffset) |
| console.log("Wrong anchor offset: " + sel.anchorOffset + " instead of " + startOffset); |
| if (sel.focusOffset != endOffset) |
| console.log("Wrong focus offset: " + sel.focusOffset + " instead of " + endOffset); |
| } |
| |
| // Indent a single line in a pre and make sure the selection is correctly preserved. |
| var pre = document.getElementById("pre-basic"); |
| setSelection(pre); |
| execMoveSelectionForwardByCharacterCommand(); |
| execExtendSelectionForwardByWordCommand(); |
| document.execCommand("indent"); |
| verifyTextSelection(document.getElementsByTagName("pre")[0].firstChild, 1, |
| document.getElementsByTagName("pre")[0].firstChild, 4); |
| |
| // Indent 2 lines. |
| setSelection(pre); |
| execMoveSelectionForwardByLineCommand(); |
| execExtendSelectionForwardByLineCommand(); |
| execExtendSelectionForwardByWordCommand(); |
| document.execCommand("indent"); |
| if (document.getElementsByTagName("pre").length > 3) { |
| // FIXME: The selection for the anchorNode is wrong. It should stay at |
| // the beginning of "line three", but it moves to the end of "line 2". |
| verifyTextSelection(document.getElementsByTagName("pre")[2].firstChild, 0, |
| document.getElementsByTagName("pre")[3].firstChild, 4); |
| } else { |
| console.log("Wrong number of pre nodes."); |
| } |
| |
| // Indent <pre> lines in a list. |
| pre = document.getElementById("pre-list"); |
| setSelection(pre); |
| execMoveSelectionForwardByLineCommand(); |
| execExtendSelectionForwardByLineCommand(); |
| execExtendSelectionForwardByLineCommand(); |
| document.execCommand("indent"); |
| verifyTextSelection(document.getElementsByTagName("blockquote")[2].firstChild, 0, |
| document.getElementsByTagName("blockquote")[2].firstChild.nextSibling, 10); |
| // Indenting <pre> lines in a table. |
| pre = document.getElementById("pre-table"); |
| setSelection(pre); |
| execMoveSelectionForwardByLineCommand(); |
| execExtendSelectionForwardByLineCommand(); |
| execExtendSelectionForwardByLineCommand(); |
| // FIXME: This is wrong. The pre tags get copied when they shouldn't be. |
| // See https://bugs.webkit.org/show_bug.cgi?id=42009 |
| document.execCommand("indent"); |
| document.getElementById("results").innerText = "PASSED (did not crash)"; |
| </script> |