gecko-dev/content/base/test/test_htmlcopyencoder.xhtml

185 строки
9.0 KiB
HTML

<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
-->
<head>
<title>Test the html copy encoder with XHTML</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">
//<![CDATA[
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> <br>bit of text.';
is(out, expected, "test container node ");
encoder.init(document, "text/html", de.OutputLFLineBreak | de.OutputSelectionOnly);
encoder.setNode(node);
out = encoder.encodeToString();
// the attributes are in the reverse order because the XHTML parser parse in the
// right order but the html serializer serializes in the reverse order
// (because the html parser stores the attribute in the reverse order,
// see bug 213347 for reason).
expected = "<div ondragstart=\"doDragStartSelection(event)\" id=\"draggable\">This is a <em>draggable</em> <br>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> <br>bit of text.</div>\n\n</div>";
todo_is(out, expected, "test 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>\n <br>bit of text.</div>";
todo_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 \naliquet lectus. Nunc vitae eros. Class</li>\n <li>aptent taciti</li>\n</ol>';
todo_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>';
todo_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>';
todo_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>\n </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>';
todo_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 ';
todo_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 ';
todo_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 ';
todo_is(out, expected, "test list selection: contains only some child of the ol + a value is set on the first li");
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 \naliquet lectus. Nunc vitae eros. Class</li>\n <li>aptent taciti</li>\n</ol>';
todo_is(out, expected, "test list selection with a value on a LI");
SimpleTest.finish();
}
SimpleTest.waitForExplicitFinish();
addLoadEvent(testHtmlCopyEncoder);
//]]>
</script>
</pre>
<div style="display: none">
<div id="draggable" ondragstart="doDragStartSelection(event)">This is a <em>draggable</em> <br/>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>
</body>
</html>