зеркало из https://github.com/mozilla/gecko-dev.git
197 строки
9.7 KiB
HTML
197 строки
9.7 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<!--
|
|
-->
|
|
<head>
|
|
<title>Test on the html copy encoder</title>
|
|
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
</head>
|
|
<body>
|
|
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=422403">Mozilla Bug </a>
|
|
<p id="display"></p>
|
|
<div id="content" style="display: none">
|
|
</div>
|
|
<pre id="test">
|
|
<script class="testbody" type="text/javascript">
|
|
|
|
function testHtmlCopyEncoder () {
|
|
const de = SpecialPowers.Ci.nsIDocumentEncoder;
|
|
var encoder = SpecialPowers.Cc["@mozilla.org/layout/htmlCopyEncoder;1"]
|
|
.createInstance(SpecialPowers.Ci.nsIDocumentEncoder);
|
|
var out, expected;
|
|
|
|
var node = document.getElementById('draggable');
|
|
|
|
|
|
// in the following tests, we must use the OutputLFLineBreak flag, to avoid
|
|
// to have the default line break of the platform in the result, so the test
|
|
// can pass on all platform
|
|
|
|
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setContainerNode(node);
|
|
out = encoder.encodeToString();
|
|
expected = 'This is a <em>draggable</em> bit of text.';
|
|
is(out, expected, "test container node ");
|
|
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setNode(node);
|
|
out = encoder.encodeToString();
|
|
expected = "<div id=\"draggable\" ondragstart=\"doDragStartSelection(event)\">This is a <em>draggable</em> bit of text.</div>";
|
|
is(out, expected, "test node");
|
|
|
|
var select = window.getSelection();
|
|
select.selectAllChildren(node);
|
|
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setSelection(select);
|
|
out = encoder.encodeToString();
|
|
expected = "<div style=\"display: none\">\n\n<div id=\"draggable\" ondragstart=\"doDragStartSelection(event)\">This is a <em>draggable</em> bit of text.</div>\n\n</div>";
|
|
is(out, expected, "test selection");
|
|
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputAbsoluteLinks | de.OutputEncodeHTMLEntities | de.OutputSelectionOnly | de.OutputRaw);
|
|
encoder.setSelection(select);
|
|
var outContext = {value:''}, outInfo = {value:''};
|
|
out = encoder.encodeToStringWithContext(outContext, outInfo);
|
|
expected = "<div style=\"display: none\">\n\n<div id=\"draggable\" ondragstart=\"doDragStartSelection(event)\">This is a <em>draggable</em> bit of text.</div>\n\n</div>";
|
|
is(out, expected, "test encodeToStringWithContext with selection ");
|
|
|
|
node.nextSibling.data="\nfoo bar\n";
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setSelection(select);
|
|
out = encoder.encodeToString();
|
|
expected = "<div id=\"draggable\" ondragstart=\"doDragStartSelection(event)\">This is a <em>draggable</em> bit of text.</div>";
|
|
is(out, expected, "test selection with additional data");
|
|
|
|
node = document.getElementById('aList');
|
|
|
|
var select = window.getSelection();
|
|
select.selectAllChildren(node);
|
|
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setSelection(select);
|
|
out = encoder.encodeToString();
|
|
expected = '<ol id=\"aList\">\n <li>Lorem ipsum dolor</li>\n <li>sit amet, <strong>consectetuer</strong> </li>\n <li>adipiscing elit</li>\n <li>Nam eu sapien. Sed viverra lacus. Donec quis ipsum. Nunc cursus aliquet lectus. Nunc vitae eros. Class</li>\n <li>aptent taciti</li>\n</ol>';
|
|
is(out, expected, "test list selection");
|
|
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setContainerNode(node);
|
|
out = encoder.encodeToString();
|
|
expected = '\n <li>Lorem ipsum dolor</li>\n <li>sit amet, <strong>consectetuer</strong> </li>\n <li>adipiscing elit</li>\n <li>Nam eu sapien. Sed viverra lacus. Donec quis ipsum. Nunc cursus aliquet lectus. Nunc vitae eros. Class</li>\n <li>aptent taciti</li>\n';
|
|
is(out, expected, "test list container node");
|
|
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setNode(node);
|
|
out = encoder.encodeToString();
|
|
expected = "<ol id=\"aList\">\n <li>Lorem ipsum dolor</li>\n <li>sit amet, <strong>consectetuer</strong> </li>\n <li>adipiscing elit</li>\n <li>Nam eu sapien. Sed viverra lacus. Donec quis ipsum. Nunc cursus aliquet lectus. Nunc vitae eros. Class</li>\n <li>aptent taciti</li>\n</ol>";
|
|
is(out, expected, "test list node");
|
|
|
|
var liList = node.getElementsByTagName("li");
|
|
var range = document.createRange();
|
|
|
|
// selection start at the first child of the ol, and end after the element ol
|
|
range.setStart(node, 1);
|
|
range.setEnd(node.parentNode, 2);
|
|
select.removeAllRanges();
|
|
select.addRange(range);
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setSelection(select);
|
|
out = encoder.encodeToString();
|
|
expected = '<ol id="aList">\n <li>Lorem ipsum dolor</li>\n <li>sit amet, <strong>consectetuer</strong> </li>\n <li>adipiscing elit</li>\n <li>Nam eu sapien. Sed viverra lacus. Donec quis ipsum. Nunc cursus aliquet lectus. Nunc vitae eros. Class</li>\n <li>aptent taciti</li>\n</ol>';
|
|
is(out, expected, "test list selection with range: selection start at the first child of the ol, and end after the element ol");
|
|
|
|
// selection start at the third child of the ol, and end after the element ol
|
|
range.setStart(node, 3);
|
|
range.setEnd(node.parentNode, 2);
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setSelection(select);
|
|
out = encoder.encodeToString();
|
|
expected = '<ol id="aList"><li value=\"2\">sit amet, <strong>consectetuer</strong> </li>\n <li>adipiscing elit</li>\n <li>Nam eu sapien. Sed viverra lacus. Donec quis ipsum. Nunc cursus aliquet lectus. Nunc vitae eros. Class</li>\n <li>aptent taciti</li>\n</ol>';
|
|
is(out, expected, "test list selection with range: selection start at the third child of the ol, and end after the element ol");
|
|
|
|
|
|
// selection start at the third child of the ol, and end after the element ol + ol start at the value 5
|
|
range.setStart(node, 3);
|
|
range.setEnd(node.parentNode, 2);
|
|
node.setAttribute("start","5");
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setSelection(select);
|
|
out = encoder.encodeToString();
|
|
expected = '<ol start=\"5\" id=\"aList\"><li value=\"6\">sit amet, <strong>consectetuer</strong> </li>\n <li>adipiscing elit</li>\n <li>Nam eu sapien. Sed viverra lacus. Donec quis ipsum. Nunc cursus aliquet lectus. Nunc vitae eros. Class</li>\n <li>aptent taciti</li>\n</ol>';
|
|
is(out, expected, "test list selection with range: selection start at the third child of the ol, and end after the element ol + ol start at the value 5");
|
|
|
|
// selection contains only some child of the ol
|
|
node.removeAttribute("start");
|
|
range.setStart(node, 3);
|
|
range.setEnd(node, 5);
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setSelection(select);
|
|
out = encoder.encodeToString();
|
|
expected = '<li>sit amet, <strong>consectetuer</strong> </li>\n ';
|
|
is(out, expected, "test list selection with range: selection contains only some child of the ol");
|
|
|
|
// selection contains only some child of the ol + ol start at the value 5
|
|
node.setAttribute("start","5");
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setSelection(select);
|
|
out = encoder.encodeToString();
|
|
expected = '<li>sit amet, <strong>consectetuer</strong> </li>\n ';
|
|
is(out, expected, "test list selection with range: selection contains only some child of the ol + ol start at the value 5");
|
|
|
|
// selection contains only some child of the ol + a value is set on the first li
|
|
node.removeAttribute("start");
|
|
liList[0].setAttribute("value","8");
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setSelection(select);
|
|
out = encoder.encodeToString();
|
|
expected = '<li>sit amet, <strong>consectetuer</strong> </li>\n ';
|
|
is(out, expected, "test list selection with range: selection contains only some child of the ol + ol start at the value 5");
|
|
|
|
select.selectAllChildren(node);
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setSelection(select);
|
|
out = encoder.encodeToString();
|
|
expected = '<ol id=\"aList\">\n <li value=\"8\">Lorem ipsum dolor</li>\n <li>sit amet, <strong>consectetuer</strong> </li>\n <li>adipiscing elit</li>\n <li>Nam eu sapien. Sed viverra lacus. Donec quis ipsum. Nunc cursus aliquet lectus. Nunc vitae eros. Class</li>\n <li>aptent taciti</li>\n</ol>';
|
|
is(out, expected, "test list selection with a value on a LI");
|
|
|
|
//test Bug 436703
|
|
node = document.getElementById('aContentEditable');
|
|
select.selectAllChildren(node);
|
|
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
|
|
encoder.setSelection(select);
|
|
out = encoder.encodeToString();
|
|
expected = '<p>one</p><p>two</p>';
|
|
is(out, expected, "select all children in an contentEditable div should not select the div itself");
|
|
|
|
SimpleTest.finish();
|
|
}
|
|
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
addLoadEvent(testHtmlCopyEncoder);
|
|
|
|
</script>
|
|
</pre>
|
|
<div style="display: none">
|
|
|
|
<div id="draggable" ondragstart="doDragStartSelection(event)">This is a <em>draggable</em> bit of text.</div>
|
|
|
|
</div>
|
|
<div style="display: none">
|
|
|
|
<ol id="aList">
|
|
<li>Lorem ipsum dolor</li>
|
|
<li>sit amet, <strong>consectetuer</strong> </li>
|
|
<li>adipiscing elit</li>
|
|
<li>Nam eu sapien. Sed viverra lacus. Donec quis ipsum. Nunc cursus aliquet lectus. Nunc vitae eros. Class</li>
|
|
<li>aptent taciti</li>
|
|
</ol>
|
|
foo bar
|
|
</div>
|
|
|
|
<div id="aContentEditable" contentEditable="true"><p>one</p><p>two</p></div>
|
|
</body>
|
|
</html>
|