|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
<html>
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
https://bugzilla.mozilla.org/show_bug.cgi?id=409380
|
|
Packit |
f0b94e |
-->
|
|
Packit |
f0b94e |
<head>
|
|
Packit |
f0b94e |
<title>Test for Bug 409380</title>
|
|
Packit |
f0b94e |
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
Packit |
f0b94e |
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
Packit |
f0b94e |
</head>
|
|
Packit |
f0b94e |
<body>
|
|
Packit |
f0b94e |
Mozilla Bug 409380
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
<script class="testbody" type="text/javascript">
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
/** Test for Bug 409380 **/
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
function runRangeTest()
|
|
Packit |
f0b94e |
{
|
|
Packit |
f0b94e |
// Bug 336381
|
|
Packit |
f0b94e |
// This is a case which can't be supported (at least not at the moment)
|
|
Packit |
f0b94e |
// because DOM Range requires that when the start boundary point is text node,
|
|
Packit |
f0b94e |
// it must be splitted. But in this case boundary point doesn't have parent,
|
|
Packit |
f0b94e |
// so splitting doesn't work.
|
|
Packit |
f0b94e |
var zz = document.getElementById("connectedDiv").firstChild;
|
|
Packit |
f0b94e |
zz.remove();
|
|
Packit |
f0b94e |
var range = document.createRange();
|
|
Packit |
f0b94e |
var hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.setStart(zz, 0);
|
|
Packit |
f0b94e |
range.setEnd(zz, 0);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException ,
|
|
Packit |
f0b94e |
"It should be possible to select text node even if the node is not in DOM.");
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.insertNode(document.createTextNode('5'));
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException,
|
|
Packit |
f0b94e |
"It shouldn't be possible to insert text node to a detached range.");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Bug 409380
|
|
Packit |
f0b94e |
var element = document.createElement('div');
|
|
Packit |
f0b94e |
var elementContent = "This is the element content";
|
|
Packit |
f0b94e |
element.innerHTML = elementContent;
|
|
Packit |
f0b94e |
range = element.ownerDocument.createRange();
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.selectNodeContents(element);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException,
|
|
Packit |
f0b94e |
"It should be possible to select node contents of a detached element.");
|
|
Packit |
f0b94e |
ok(range.toString() == elementContent, "Wrong range selection");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// range.selectNode can't succeed because selectNode sets boundary points
|
|
Packit |
f0b94e |
// to be parentNode, which in this testcase is null.
|
|
Packit |
f0b94e |
element = document.createElement('div');
|
|
Packit |
f0b94e |
range = element.ownerDocument.createRange();
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.selectNode(element);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "It shouldn't be possible to select a detached element.");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Testing contextual fragment.
|
|
Packit |
f0b94e |
range = element.ownerDocument.createRange();
|
|
Packit |
f0b94e |
var cf = null;
|
|
Packit |
f0b94e |
var testContent = "foobar";
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.selectNodeContents(element);
|
|
Packit |
f0b94e |
cf = range.createContextualFragment(testContent);
|
|
Packit |
f0b94e |
element.appendChild(cf);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(cf, "Creating contextual fragment didn't succeed!");
|
|
Packit |
f0b94e |
ok(element.innerHTML == testContent, "Wrong innerHTML!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
element = document.createElement('div');
|
|
Packit |
f0b94e |
element.textContent = "foobar";
|
|
Packit |
f0b94e |
range = element.ownerDocument.createRange();
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.selectNodeContents(element);
|
|
Packit |
f0b94e |
element.firstChild.insertData(3, " ");
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(range.toString() == "foo bar");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Testing contextual fragment, but inserting element to document
|
|
Packit |
f0b94e |
// after creating range.
|
|
Packit |
f0b94e |
element = document.createElement('div');
|
|
Packit |
f0b94e |
range = element.ownerDocument.createRange();
|
|
Packit |
f0b94e |
document.body.appendChild(element);
|
|
Packit |
f0b94e |
cf = null;
|
|
Packit |
f0b94e |
testContent = "foobar";
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.selectNodeContents(element);
|
|
Packit |
f0b94e |
cf = range.createContextualFragment(testContent);
|
|
Packit |
f0b94e |
element.appendChild(cf);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(cf, "Creating contextual fragment didn't succeed!");
|
|
Packit |
f0b94e |
ok(element.innerHTML == testContent, "Wrong innerHTML!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Testing contextual fragment, but inserting element to document
|
|
Packit |
f0b94e |
// before creating range.
|
|
Packit |
f0b94e |
element = document.createElement('div');
|
|
Packit |
f0b94e |
document.body.appendChild(element);
|
|
Packit |
f0b94e |
range = element.ownerDocument.createRange();
|
|
Packit |
f0b94e |
cf = null;
|
|
Packit |
f0b94e |
testContent = "foobar";
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.selectNodeContents(element);
|
|
Packit |
f0b94e |
cf = range.createContextualFragment(testContent);
|
|
Packit |
f0b94e |
element.appendChild(cf);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(cf, "Creating contextual fragment didn't succeed!");
|
|
Packit |
f0b94e |
ok(element.innerHTML == testContent, "Wrong innerHTML!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
element = document.createElement('div');
|
|
Packit |
f0b94e |
var range2 = element.ownerDocument.createRange();
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range2.selectNodeContents(element);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException,
|
|
Packit |
f0b94e |
"It should be possible to select node contents of a detached element.");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Now the boundary points of range are in DOM, but boundary points of
|
|
Packit |
f0b94e |
// range2 aren't.
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.compareBoundaryPoints(range.START_TO_START, range2);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "Should have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.compareBoundaryPoints(range.START_TO_END, range2);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "Should have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.compareBoundaryPoints(range.END_TO_START, range2);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "Should have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.compareBoundaryPoints(range.END_TO_END, range2);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "Should have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range2.compareBoundaryPoints(range.START_TO_START, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "Should have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range2.compareBoundaryPoints(range.START_TO_END, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "Should have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range2.compareBoundaryPoints(range.END_TO_START, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "Should have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range2.compareBoundaryPoints(range.END_TO_END, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "Should have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// range3 will be in document
|
|
Packit |
f0b94e |
element = document.createElement('div');
|
|
Packit |
f0b94e |
document.body.appendChild(element);
|
|
Packit |
f0b94e |
range3 = element.ownerDocument.createRange();
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range3.selectNodeContents(element);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException,
|
|
Packit |
f0b94e |
"It should be possible to select node contents of a detached element.");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range3.compareBoundaryPoints(range.START_TO_START, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException, "Shouldn't have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range3.compareBoundaryPoints(range.START_TO_END, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException, "Shouldn't have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range3.compareBoundaryPoints(range.END_TO_START, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException, "Shouldn't have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range3.compareBoundaryPoints(range.END_TO_END, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException, "Shouldn't have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// range4 won't be in document
|
|
Packit |
f0b94e |
element = document.createElement('div');
|
|
Packit |
f0b94e |
var range4 = element.ownerDocument.createRange();
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range4.selectNodeContents(element);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException,
|
|
Packit |
f0b94e |
"It should be possible to select node contents of a detached element.");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range4.compareBoundaryPoints(range.START_TO_START, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "Should have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range2.compareBoundaryPoints(range.START_TO_END, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "Should have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range4.compareBoundaryPoints(range.END_TO_START, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "Should have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range4.compareBoundaryPoints(range.END_TO_END, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(hadException, "Should have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Compare range to itself.
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.compareBoundaryPoints(range.START_TO_START, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException, "Shouldn't have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.compareBoundaryPoints(range.START_TO_END, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException, "Shouldn't have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.compareBoundaryPoints(range.END_TO_START, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException, "Shouldn't have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range.compareBoundaryPoints(range.END_TO_END, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException, "Shouldn't have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// Attach startContainer of range2 to document.
|
|
Packit |
f0b94e |
ok(range2.startContainer == range2.endContainer, "Wrong container?");
|
|
Packit |
f0b94e |
document.body.appendChild(range2.startContainer);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range2.compareBoundaryPoints(range.START_TO_START, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException, "Shouldn't have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range2.compareBoundaryPoints(range.START_TO_END, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException, "Shouldn't have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range2.compareBoundaryPoints(range.END_TO_START, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException, "Shouldn't have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
hadException = false;
|
|
Packit |
f0b94e |
try {
|
|
Packit |
f0b94e |
range2.compareBoundaryPoints(range.END_TO_END, range);
|
|
Packit |
f0b94e |
} catch (ex) {
|
|
Packit |
f0b94e |
hadException = true;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
ok(!hadException, "Shouldn't have got an exception!");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
SimpleTest.finish();
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
SimpleTest.waitForExplicitFinish();
|
|
Packit |
f0b94e |
addLoadEvent(runRangeTest);
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
</script>
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
zz
|
|
Packit |
f0b94e |
</body>
|
|
Packit |
f0b94e |
</html>
|
|
Packit |
f0b94e |
|